隱含等待implicitly wait

隱含等待會告訴 Selenium:找不到元素時,最多再等幾秒。

設定一次後,後面的 find_element() 與 find_elements() 都會受到影響。

driver.implicitly_wait(10)

這不是每次都固定停 10 秒。若元素在第 2 秒出現,Selenium 就會立刻繼續;只有一直找不到時,才會等到接近 10 秒。

from selenium import webdriver
from selenium.webdriver.common.by import By


### 啟動 Chrome
driver = webdriver.Chrome()

driver.implicitly_wait(10) # 找不到元素時,最多等待 10 秒


### 開啟網頁
try:
    driver.get("https://zh.wikipedia.org/wiki/臺灣")


    ### 取得文章標題
    title = driver.find_element(
        By.ID,
        "firstHeading"
    )

    print("文章標題:")
    print(title.text)


    ### 取得文章段落
    paragraph = driver.find_element(
        By.CSS_SELECTOR,
        ".mw-content-ltr > p"
    )

    print("\n第一段內容:")
    print(paragraph.text)


finally:
    driver.quit()

它的優點是寫法簡單,但只能處理「元素是否找得到」,不能精確表達更多條件,例如:

  • 元素已經顯示
  • 按鈕已經可以點擊
  • 指定文字已經出現
  • Loading 遮罩已經消失
  • 舊的搜尋結果已經更新