出現Element is not clickable at point錯誤或者NoSuchElement的緣由🈶️如下幾點:python
一、這個元素被點擊的時候不在頁面可見範圍內 web
解決方法:使用顯式等待方法等待元素可見或者可點擊。瀏覽器
二、這個元素還未加載出來ui
解決方法:使用sleep休眠幾秒等待加載spa
三、這個可被點擊的元素被其餘元素/蒙層所覆蓋了 code
解決方法:對於下拉菜單鼠標懸停等使用ActionChains類解決blog
四、在Iframe裏ci
解決方法:將焦點轉至iframe裏element
注:頁面等待方法(python)iframe
a.顯式等待:使WebDriver等待某個條件成立時繼續執行,不然超過期長就跑出超時異常
使用方法:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
frameElement=WebDriverWait(driver,30,0.5).until(EC.presence_of_element_located((By.XPATH,xpath)))
其中WebDriverWait(driver瀏覽器驅動,timeout最長超過期間,檢測間隔時間S),在設置時間內,每隔一段時間檢測一下當前頁面是否存在,超過期間拋異常
WebDriverWait()通常由utill()或until_not()配合使用
until(method,message='')調用該方法提供的驅動程序做爲一個參數,知道返回值爲True
EC----expected_conditions類提供了一系列的場景判斷方法,本例子使用了presence_of_element_located()方法判斷元素是否存在
b.隱式等待
WebDriver.implicitly_wait(10)經過必定的時長來等待頁面上某元素加載完成。
注:單位S,10s並非一個固定的等待時間他不影響腳本的執行速度,不針對頁面上的某一元素進行等待,若是元素能夠定位,繼續執行,不能夠定位會已輪詢的方式不斷判斷元素是否被定位到,沒法定位拋出異常。
c.sleep休眠
但願腳本執行到某個位置作固定時間的休眠
from time import sleep sleep(10)