selenium報錯Element is not clickable at point及四種解決方法


點擊報錯

使用Selenium時,觸發點擊事件,經常報如下異常:

Element is not clickable at point
1
原因及解決方法

無外乎四種原因

未加載

沒加載出來就等待元素加載出來,再往下執行。
可以使用python庫time

import time
time.sleep(3)
1
2
不過最好還是使用selenium自帶WebDriverWait

from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait(driver, 10).until(EC.title_contains("元素"))
1
2
3
WebDriverWait的具體用法請點擊參考文檔。

在iframe里

如果元素在iframe里,在窗口里找是找不到元素的,更是無法點擊。所以,要切換到iframe里去找元素。

driver.switch_to_frame("frameName") # 根據框架名來切換
driver.switch_to_frame("frameName.0.child") # 子框架
driver.switch_to_default_content() # 返回
1
2
3
其他相關切換,請點擊參考文檔

不在視窗里,需要拉滾動條

很多網站的列表頁不是立馬返回所有內容,是根據視圖來顯示的。所以,我們就需要拖動滾動條來把要獲取的內容顯示到視窗里才可以獲取到。

page = driver.find_element_by_partial_link_text(u'下一頁')
driver.execute_script("arguments[0].scrollIntoView(false);", page)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, u'下一頁'))).click()
1
2
3
關於下拉滾動條的內容可以參考博客

要點擊的元素被覆蓋

可以使用事件鏈來解決
例如下拉菜單,通過hover,讓子菜單顯示,就可以點擊了。

menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
1
2
3
4
關於事件鏈詳情,請點擊文檔。

參考

思路來源於網友半山,在此感謝半山。
————————————————
版權聲明:本文為CSDN博主「lilongsy」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lilongsy/article/details/76152620


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM