Selenium运行慢 - 通过设置selenium加载策略加快运行速度

一、前言

有不少粉丝,甚至一些行业中有一定经验的朋友都说selenium性能差、很慢,打开一个网页要等半天才开始执行。初学的粉丝提出这个问题我能够理解,行业工作经验数年还这样说我就有点诧异了。看来很多小伙伴还是没有阅读官方文档的习惯,这里就简单的讲解一下为什么你会觉得selenium慢以及如何解决这个问题:

当我们通过webdriver(比如启动谷歌浏览器:webdriver.Chrome())启动浏览器时,会启动一个没有任何缓存、cookie的浏览器。这个时候通过driver.get(“https://xxx”)去访问页面自然是慢的,因为它需要加载该页面的资源,如果它的图片、样式、js文件过大时,这个时候就会变得更慢。

跟我们平时直接将浏览器清除缓存再访问是一个道理,这并不是Selnium本身性能存在缺陷。

但这时小伙伴们肯定会有疑惑,就算清了浏览器缓存重新访问,也没有通过Selnium来跑的那么慢呀!想要点击的按钮都出现半天了,它都还不进行点击,这不叫慢吗?

这其实跟Selenium的页面加载策略有关。

Selnium的页面加载策略(pageLoadStrategy)

  1. normal:等待整个页面加载完毕再开始执行操作
  2. eager:等待整个dom树加载完成,即DOMContentLoaded这个事件完成,也就是只要 HTML完全加载和解析完毕就开始执行操作。放弃等待图片、样式、子帧的加载。
  3. none:等待html下载完成,哪怕还没开始解析就开始执行操作。
    默认情况下,当 Selenium WebDriver
    加载页面时,它遵循的是normal加载策略,所以就会导致页面加载过慢,特别是在图片、样式等文件过大时,慢的就尤其明显了。

所以我们可以根据实际情况调整Selenium的页面加载策略来缩短等待时间,提高执行速度。

加载策略设置为eager

配置代码如下:

chrome_options = Options()
chrome_options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=chrome_options)

加载策略设置为none

加载策略设置为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并不慢,只是你加载策略没有选择对而误认为它慢。

当我们遇到比较费解或疑惑的问题时,应该第一时间去看看官方文档,说不定它已经有了解决方案了。

————————————————
原文链接:https://blog.csdn.net/m0_67393619/article/details/123321768

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 要加快Selenium速度,可以采取以下几种方法。首先,可以禁用加载策略,将加载策略设置为"none",这样可以跳过页面加载的等待时间。其次,可以使用retry机制进行重试,以防止报错,这样可以提高执行的稳定性。另外,可以设置隐式等待时间来等待元素的出现,但相比retry机制,retry更为稳妥。最后,可以使用无头浏览器来执行操作,这样可以避免浏览器界面的显示,提高执行速度。综上所述,通过禁用加载策略、使用retry机制、设置隐式等待时间和使用无头浏览器,可以加快Selenium速度。\[2\]\[3\] #### 引用[.reference_title] - *1* [[Selenium]你真的知道怎么提高Selenium运行速度吗?](https://blog.csdn.net/m0_72760466/article/details/129758259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Selenium运行 - 通过设置selenium加载策略加快运行速度](https://blog.csdn.net/weixin_43831559/article/details/125898986)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值