曲鳥全棧UI自動化教學(五):Selenium的鍵盤鼠標事件詳解">曲鳥全棧UI自動化教學(五):Selenium的鍵盤鼠標事件詳解
1010
2025-04-03
一、前言
有不少粉絲,甚至一些行業中有一定經驗的朋友都說selenium性能差、很慢,打開一個網頁要等半天才開始執行。初學的粉絲提出這個問題我能夠理解,行業工作經驗數年還這樣說我就有點詫異了。看來很多小伙伴還是沒有閱讀官方文檔的習慣,這里就簡單的講解一下為什么你會覺得selenium慢以及如何解決這個問題:
當我們通過webdriver(比如啟動谷歌瀏覽器:webdriver.Chrome())啟動瀏覽器時,會啟動一個沒有任何緩存、cookie的瀏覽器。這個時候通過driver.get("https://xxx")去訪問頁面自然是慢的,因為它需要加載該頁面的資源,如果它的圖片、樣式、js文件過大時,這個時候就會變得更慢。
跟我們平時直接將瀏覽器清除緩存再訪問是一個道理,這并不是Selnium本身性能存在缺陷。
但這時小伙伴們肯定會有疑惑,就算清了瀏覽器緩存重新訪問,也沒有通過Selnium來跑的那么慢呀!想要點擊的按鈕都出現半天了,它都還不進行點擊,這不叫慢嗎?
這其實跟Selenium的頁面加載策略有關。
二、Selenium的頁面加載策略詳解
Selnium的頁面加載策略(pageLoadStrategy)有三種:
normal:等待整個頁面加載完畢再開始執行操作
eager:等待整個dom樹加載完成,即DOMContentLoaded這個事件完成,也就是只要 HTML 完全加載和解析完畢就開始執行操作。放棄等待圖片、樣式、子幀的加載。
none:等待html下載完成,哪怕還沒開始解析就開始執行操作。
默認情況下,當 Selenium WebDriver 加載頁面時,它遵循的是normal加載策略,所以就會導致頁面加載過慢,特別是在圖片、樣式等文件過大時,慢的就尤其明顯了。
所以我們可以根據實際情況調整Selenium的頁面加載策略來縮短等待時間,提高執行速度。
下圖是默認情況(未手動指定加載策略)來訪問愛奇藝首頁,然后點擊電影,共耗時:7s左右
下圖是使用eager加載策略來訪問愛奇藝首頁,然后點擊電影,共耗時:3.6s左右
配置代碼如下:
chrome_options = Options() chrome_options.page_load_strategy = 'eager' driver = webdriver.Chrome(options=chrome_options)
可以明顯的看到訪問速度變快了。
以為就這樣了嗎?還可以更快!
加載策略設置為none,并引入retry做重試(目的是為了防止報錯,當然設置隱式等待也可,但沒retry穩妥)可以只用2s左右就能執行完成,完整代碼如下:
import datetime from retrying import retry # 需第三方庫,需pip進行安裝 from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By @retry(wait_fixed=10, stop_max_attempt_number=1) def click(path): driver.find_element(By.XPATH, path).click() chrome_options = Options() chrome_options.page_load_strategy = 'none' driver = webdriver.Chrome(options=chrome_options) start_time = datetime.datetime.now() driver.get('https://www.iqiyi.com/') click('//*[@id="block-C"]/div/div/div/div[1]/div[1]/div/div[1]/div/div/a/span[2]') end_time = datetime.datetime.now() print(end_time - start_time)
三、總結
所以selenium并不慢,只是你加載策略沒有選擇對而誤認為它慢。
當我們遇到比較費解或疑惑的問題時,應該第一時間去看看官方文檔,說不定它已經有了解決方案了。
另外,本專欄教程將無限期停止更新,因為最近在寫更有意思、更干貨的專欄《從0構建自動化測試平臺》 歡迎訂閱支持!
在線演示地址:http://121.43.43.59/ (帳號:admin 密碼:123456)
Python Selenium 自動化測試
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。