selenium設定元素等待
由於指令碼執行速度過快,頁面上有些元素未刷新出來,導致定位元素失敗。為解決這一問題,我們需要在指令碼中加入元素等待。webdriver提供了兩種等待方式:顯式等待和隱身等待。另外還有一種sleep休眠法。
1.顯示等待
顯示等待是webdriver等待某個條件成立時繼續執行,否則在達到最大時長的時候丟擲TimeoutException
使用前需要匯入相應的包:
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait類由webdriver提供的等待方法,在設定的時間內,預設每隔一段時間檢測一次當前頁面元素是否存在,如果超出設定的時間為檢測出元素,則丟擲異常。
語法:WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:瀏覽器驅動
timeout:超時時間,單位為秒
poll_frequency:檢測的間隔時間,預設為0.5s
ignored_exceptions:超時後拋得異常,預設情況下拋NoSuchElementException.
WebDriverWait()一般由until()或until_not()配合使用。未完待續
2.隱式等待
隱式等待是通過一定時長來等待頁面上某個元素的載入,webdriver提供了implicitly_wait()方法來實現隱式等待,預設為0.超時丟擲NoSuchElementException.
語法:driver.implicitly_wait(),時間為秒。假設等待時間為8秒,這8秒不是一個固定時間,不會影響指令碼的執行效率,它不針對頁面上的某個元素進行等待。當指令碼執行到某個元素定位時,如果元素可以定位到,則繼續執行,如果定位不到,則會輪詢進行定位,假設在3秒時,元素定位到,則繼續執行。如果超過8秒,則丟擲異常。
3.sleep休眠法
使用sleep()方法時需要先匯入該方法。該方法是一個固定時間等待的方法,指令碼會固定停止一段時間,然後再繼續執行
from time import sleep
語法:sleep(),單位為秒