2016-06-13 100 views
2

我使用Selenium爲Python瀏覽一個動態網頁(link)失敗。硒:動態加載的頁面會導致自動滾動

我想自動向下滾動到頁面上的y點。我嘗試了各種方法來編碼,這似乎適用於其他頁面,但不適用於此特定網頁。

,似乎沒有爲Firefox硒的工作我的努力的一些例子:

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.get("http://en.boerse-frankfurt.de/etp/Deka-Oekom-Euro-Nachhaltigkeit-UCITS-ETF-DE000ETFL474") 

通過滾動到Y位置:

driver.execute_script("window.scrollTo(0, 1400);") 

或者通過找到一個元素:

try: 
    find_scrollpoint = driver.find_element_by_xpath("//*[@id='main-wrapper']/div[10]/div/div[1]/div[1]") 
except: 
    pass 
else: 
    scrollpoint = find_scrollpoint.location["y"] 
    driver.execute_script("window.scrollTo(0, scrollpoint);") 

問題:

在這樣的網頁上可能會出現一些不尋常的情況,在這種情況下,這種非常典型的scrollTo代碼可能會失敗?

什麼都不可能做才能減輕呢?也許按鍵會向下滾動 - 但它仍然需要知道何時停止按下。

回答

2

這只是一個相當動態的頁面。我會wait for this specific element to be visible,然後滾動到它的視圖。這適用於我:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 


driver = webdriver.Firefox() 
driver.get("http://en.boerse-frankfurt.de/etp/Deka-Oekom-Euro-Nachhaltigkeit-UCITS-ETF-DE000ETFL474") 

wait = WebDriverWait(driver, 10) 
elm = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='main-wrapper']/div[10]/div/div[1]/div[1]"))) 

driver.execute_script("arguments[0].scrollIntoView();", elm) 
+0

謝謝亞歷克斯!整潔的解決方案。 – Winterflags