曲鳥全棧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左右

      配置代碼如下:

      曲鳥全棧UI自動化教學(九):Selenium為什么慢?那是你加載策略設置不對

      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小時內刪除侵權內容。

      上一篇:庫存進銷存管理(進銷庫存管理表)
      下一篇:如何取消新聞熱點
      相關文章
      亚洲免费电影网站| 国产亚洲精品91| 亚洲成A∨人片天堂网无码| 亚洲国产成人资源在线软件| 亚洲av无码国产精品色午夜字幕| AV在线播放日韩亚洲欧| 亚洲精品视频在线看| 亚洲?v无码国产在丝袜线观看| 久久亚洲精品11p| 亚洲6080yy久久无码产自国产| 亚洲AV日韩AV无码污污网站| 亚洲AV无码之国产精品| 久久精品国产亚洲AV| 精品久久久久亚洲| 亚洲AV成人潮喷综合网| 亚洲av无码成人精品区在线播放| 男人的天堂亚洲一区二区三区| 亚洲AV无码一区二区三区系列| 亚洲av永久无码精品古装片| 久久亚洲精品成人| 亚洲色成人网一二三区| 亚洲中文字幕人成乱码| 伊人久久五月丁香综合中文亚洲| 亚洲人成7777| 亚洲日本一线产区和二线产区对比| 亚洲精品无码av中文字幕| 国产精品亚洲综合一区在线观看| mm1313亚洲精品无码又大又粗 | 亚洲欧美黑人猛交群| 亚洲国产精品无码久久久秋霞1| 亚洲JLZZJLZZ少妇| 亚洲午夜成人精品电影在线观看| 亚洲中文字幕无码一久久区| 亚洲AV无码专区在线播放中文 | 亚洲AV日韩AV天堂一区二区三区 | 亚洲免费福利在线视频| 亚洲高清乱码午夜电影网| 亚洲国产日韩成人综合天堂 | 国产亚洲自拍一区| 亚洲av激情无码专区在线播放| 在线电影你懂的亚洲|