【发布时间】:2018-04-02 02:06:11
【问题描述】:
我需要单击 DOM 中的元素,但它们不会显示在浏览器页面上,除非我向下滚动到页面底部才能看到它。
我有更好的方法吗?
如果没有scroll_browser(driver) 行,程序将失败并显示“消息:未知错误:元素不可点击”,并且在点击之前向下滚动就可以了。
import time
from selenium import webdriver
def scroll_browser(driver, destination_height=None):
# Get scroll height
if not destination_height:
destination_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == destination_height:
break
destination_height = new_height
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get('https://wikimediafoundation.org/wiki/Home')
time.sleep(2)
link = '//a[text()="Terms of Use"]'
time.sleep(2)
#scroll_browser(driver)
driver.find_element_by_xpath(link).click()
time.sleep(2)
driver.close()
【问题讨论】:
-
如果你需要滚动到浏览器中心的元素你可以检查这个问题stackoverflow.com/questions/20167544/…
-
当单击不在当前视口中的元素时,chromedriver 2.30 中存在一个已知问题。正如 WebDriver 规范所说,如果元素不在当前视口中,则 webdriver 需要在单击/发送键之前将其滚动到当前视口。所以每个浏览器的Webdriver.exe都应该为我们做这些,而不是我们自己添加外部代码。因此,请检查您的 chromedriver 版本是否为 2.30。尝试升级到 2.32 及更高版本。
标签: python selenium selenium-webdriver selenium-chromedriver