在Selenium webdriver中修复错误“元素不可点击”

问题描述:

我需要点击DOM中的元素,但它们不会显示在浏览器页面上,除非我向下滚动到页面底部以查看它。在Selenium webdriver中修复错误“元素不可点击”

有没有更好的方法来做到这一点?

该程序将失败,并显示“消息:未知错误:元素不可点击的点”,没有行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() 
+0

如果您需要滚动到元素在浏览器的中心,您可以检查这个问题https://stackoverflow.com/questions/ 20167544/selenium-scroll-element-into-center-of-view – jadupl

+0

[使用webdriver滚动到元素?]的可能重复(https://stackoverflow.com/questions/41744368/scrolling-to-element-using-webdriver) – Mangohero1

+1

单击不在当前视口中的元素时,在chromedriver 2.30中存在已知问题。正如WebDriver规范所说的,如果元素不在当前视口中,则webdriver需要在点击/ sendkeys之前将其滚动到当前视口中。所以每个浏览器的Webdriver.exe都应该为我们做,而不是由我们自己添加外部代码。所以检查你的chromedriver版本是否为2.30。尝试升级到2.32及更高版本。 – yong

尝试滚动到下面的代码所需的元素:

if __name__ == '__main__': 
    driver = webdriver.Chrome() 
    driver.get('https://wikimediafoundation.org/wiki/Home') 
    link = driver.find_element_by_link_text('Terms of Use') 
    driver.execute_script('arguments[0].scrollIntoView();', link) 
    link.click() 
    driver.close()