出現Element is not clickable at point錯誤或者NoSuchElement的原因?️以下幾點:
1、這個元素被點選的時候不在頁面可見範圍內
解決方法:使用顯式等待方法等待元素可見或者可點選。
2、這個元素還未載入出來
解決方法:使用sleep休眠幾秒等待載入
3、這個可被點選的元素被其他元素/蒙層所覆蓋了
解決方法:對於下拉選單滑鼠懸停等使用ActionChains類解決
4、在Iframe裡
解決方法:將焦點轉至iframe裡
注:頁面等待方法(python)
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)