2017-10-20 161 views
0

我需要點擊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

回答

1

嘗試滾動到下面的代碼所需的元素:

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() 
相關問題