我使用Selenium
为Python导航动态网页(link)。
我想自动向下滚动到页面上的y点。我已经尝试了各种方法来编写代码,这些方法似乎适用于其他页面,但不适用于此特定网页。
我的努力的一些例子似乎不适用于使用Selenium的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
代码可能会失败?
可以做些什么来减轻它?也许按下按键 - 但它仍然必须知道何时停止按下。
答案 0 :(得分:3)
这只是一个非常动态的页面。我会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)