AD

2022-12-08

[Python + Selenium] webdriver.get() 設置最長等待時間

webdriver.get(url) 到一個頁面後,會等到頁面載入完成(onload 事件觸發) ,然後再將控制權交回給測試 script。

在網路不穩定的情況下,或網站也些問題時,等到頁面 onload 可能非常久。
webdriver.get 預設的 timeout 在某些不同的 webdriver 中可能到5分鐘之久。

所以可以用 set_page_load_timeout() 設定一個最長的頁面等待時間:

from selenium import webdriver

driver = webdriver.Chrome()
driver.set_page_load_timeout(20) #傳入最長等待秒數

try:
    driver.get("http://www.example.com")
    
except TimeoutError:
    print("Timed out waiting for page to load.")

以上將頁面的最長等待時間設為20秒,等候頁面超過20秒會拋出 TimeoutError。

2022-07-01

Docker selenium/standalone-chrome 遇到 ConnectionResetError(104, 'Connection reset by peer')

這是一篇其實沒什麼真正問題的筆記,但花了幾個小時才解決,記錄一下。
 
我們的 Jenkins pipline 會起一個 selenium/standalone-chrome 的 docker,用類似這樣的方式起:
  docker run -d -p 4444:4444 selenium/standalone-chrome 

每次跑完都會 stop 這個 container。 

code 是類似這樣連 remote webdriver 的: webdriver.Remote("http://localhost:4444/wd/hub",options=options) 

其他專案的 docker compose 執行 selenium/standalone-chrome 後,用一樣的 code 都沒問題,但這次卻一直遇到以下的錯誤:
 Execute case encounter an error: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) 

還有一次是這樣的錯誤: Execute case encounter an error: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) 

後來才發現是因為 docker 還在啟動⋯⋯

如果文章有幫助到你可以在 LikeCoin 上幫我拍手喔