通常代碼執行的速度?頁?渲染的速度要快,如果避免因為渲染過慢出現的?動化誤報的問題呢?可以使?selenium中提供的三種等待?法:
1. 隱式等待(Implicit Wait)
隱式等待適用于全局,它告訴 WebDriver 在查找元素時等待一定的時間,直到元素出現。
如果超時,WebDriver 不會拋出異常,而是返回 NoSuchElementException
。
適用場景
- 頁面加載速度不穩定,元素可能會晚一點出現。
- 適合不需要精確等待時間的情況。
from selenium import webdriver# 設置 Edge 瀏覽器
driver = webdriver.Edge()# 設置隱式等待 10 秒
driver.implicitly_wait(10)# 訪問網頁
driver.get("https://example.com")# 查找元素(如果元素未出現,則最多等待 10 秒)
element = driver.find_element("id", "someElement")# 關閉瀏覽器
driver.quit()
implicitly_wait(10)
適用于 整個 WebDriver 生命周期。- 只需要設置一次,之后所有
find_element()
調用都會等待。- 無法針對特定元素設置不同的等待時間。
2. 顯式等待(Explicit Wait)
顯式等待用于等待某個特定元素出現,在超時時間內不斷檢查,直到條件滿足。
它比隱式等待更精確,可以用于特定的元素。
適用場景
- 只想等待某個特定元素,而不是所有元素。
- 需要等待的條件較復雜,例如元素可見、可點擊等。
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# 設置 Edge 瀏覽器
driver = webdriver.Edge()# 訪問網頁
driver.get("https://example.com")# 等待最多 10 秒,直到元素可見
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "some