selenium 4.17正式发布,这几项更新值得关注

news2025/1/4 18:39:28

(全文约1400字,阅读约需4分钟,首发于公众号:测试开发研习社,欢迎关注)

两天前,selenium 正式发布了新版本 4.17,其中 python 版本的变化有更新更新值得关注

1. CDP 支持范围调整到 >118

CDP(Chrome DevTools Protocol)支持对 Chrome 进行深度的检测、检查、设置、调试和分析,能够完成 webdriver 协议和 JavaScript 代码无法实现的复杂功能。

selenium 4.17 不再支持 chrome 118 以下的版本,

当然,基于 webdriver 协议对浏览器进行自动化控制还是正常使用的

2. 为页面加载策略创建枚举类

页面加载策略(pageLoadStrategy)和元素定位策略(Element Locator strategies)、等待策略(Waiting Strategies),

并称 Selenium 中的三大策略。通过对策略的调整,可以提高 Web 自动化的执行速度,减少操作失败。

其中页面加载策略有 3 种选项:

  1. none:完成 HTML 下载后返回

  2. eager:完成 HTML 渲染后返回

  3. normal:完成资源(图片、CSS、JS)渲染后返回

页面加载策略的默认值为 normal,也就是等整个页面的各项资源都下载渲染后,开始执行下一行代码。

例如,腾讯网首页引用了大量资源文件,默认情况下定位一个新闻标题,耗时需要 5 秒多

图片

在调整了页面加载策略后,会放弃等待资源文件,马上执行下一行代码

(这时元素可能还没渲染出来)

再调整等待策略,在定位失败时不断重试,确保定位成功

这样,仅需 1 秒多即可完成定位

图片

注意这里的代码写法:

from selenium import webdriver
from webdriver_helper import get_webdriver

options = webdriver.ChromeOptions() # 实例化options
options.page_load_strategy = 'none'  # 修改页面加载策略,提前返回

driver = get_webdriver(options=options) # 起点浏览器时传递options

修改定位策略是给 options 的 page_load_strategy 赋值字符串,字符串难免会记错、写错。

本次Selenium 4.17 的更新中,创建了枚举类 PageLoadStrategy,在 IDE 中可以体验代码提示、自动补全,避免了记错写错的问题

图片

注意:在单页应用中,往往并不适合调整页面加载策略

3. 提高浏览器驱动的启动速度

简单来说,优化了 sleep 代码,节省了约 0.5 秒,

接下来看看优化的细节。

在之前的版本中,为了确保浏览器驱动启动成功有这样的处理逻辑:

  1. 启动子进程后,休眠 0.5 秒,然后判断是否启动成功

  2. 如果失败,重复第一步

  3. 如果失败 60 次,放弃启动,进行报错

有个哥们经过实验发现:顺利的情况下,浏览器驱动启动速度其实极快!

于是调整了休眠重试的机制:

图片

不再是每次重试,都等待固定的 0.5 秒

而是第一次等待 0.01,以后每次重试增加 0.05,直到 0.5 一次

这哥们还补充了个测试用例,优化之后正常情况下启动时间 <= 0.01

图片

对细节感兴趣的观众可以点击【查看原文】

注意,此处优化的是【浏览器驱动】的启动时间,不是【浏览器】的启动时间。

浏览器的启动时间耗费更久、波动更大

4. 变更记录全文

变更记录全文如下,你可以找对感兴趣的内容进一步了解:

Selenium 4.17.2

  • [Python] 修正 typing_extension 依赖以生成 wheel

Selenium 4.17.1

  • 在 setup.py 中修正拼写错误 (#13487)

Selenium 4.17.0

  • 添加页面加载策略枚举 (#13258)

  • 在升级版本时使用正确的文件名 (#13282)

  • 根据事件类型过滤记录的双向文本日志 (#12951)

  • 在 Selenium 管理器输入中添加 Python 以进行跟踪 (参见 #13288)

  • 根据尝试次数延迟等待服务启动 (#13321)

  • 使用 subprocess.DEVNULL 替代 open (os.devnull) 以避免泄漏文件句柄 (#13329)

  • 移除所有对 firefox-bin 的引用

  • 检查是否支持 Selenium Manager 的体系结构 / 平台组合 (#13381)

  • 移除扩展连接类和 webdriver.xpi 的其他用法

  • 移除 Edge 服务中已弃用的 verbose 参数

  • 移除 webdriver 中已弃用的 desired_capabilities 属性

  • 移除已弃用的应用程序缓存支持

  • 记录请求时截断大字符串

  • 更新 WPEWebKit 支持代码 (#13278)

  • [Python] 修复 WPEWebKit 的 Python 支持代码

  • 默认情况下不更改现有目录的配置偏好项 (#13477)

  • 弃用不受支持的 Firefox 配置方法 (#13477)

  • 弃用 FirefoxBinary 类 (#13476)

  • 修复 mypy 中的类型错误 (#13482)

  • 添加 Chrome 121 的 CDP 并移除 118

原创不易,喜欢请星标+点赞+在看,关注公众号《测试开发研习社》,不错过技术干货,谢谢鼓励!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1499544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

117.龙芯2k1000-pmon(16)- linux下升级pmon

pmon的升级总是有些不方便&#xff0c;至少是要借助串口和串口工具 如果现场不方便连接串口&#xff0c;是不是可以使用网线升级pmon呢&#xff1f; 答案当然是可行的。 环境&#xff1a;2k1000linux3.10麒麟的文件系统 如今我已经把这个工具开发出来了。 GitHub - zhaozhi…

做抖店用平板能代替电脑操作吗?抖店运营相关注意事项,注意规避

我是王路飞。 之前给你们讲在抖音开店流程的时候&#xff0c;说过开店需要用到电脑&#xff0c;还需要执照、资金、时间等等。 那么做抖店用平板能代替电脑操作吗&#xff1f; 这个问题其实有很多新手问过我&#xff0c;有的甚至是想直接在手机上操作&#xff0c;想着能省点…

怎么对接迅雷网盘拉新项目?迅雷网盘怎么做才有效果?

自网盘拉新项目上线以来&#xff0c;网盘市场日益繁荣&#xff0c;各大厂商纷纷进军这一领域。头条网盘、悟空网盘、UC网盘、迅雷网盘等都成为了各个推广达人喜欢的推广项目。其中&#xff0c;迅雷网盘凭借其稳定的服务、强大的功能和广泛的用户基础&#xff0c;成为了市场中的…

西门子Mendix低代码资深技术顾问张戟,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;LowCode低码时代、RPA中国、AIGC开放社区&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索低…

【Java EE初阶三十】JVM的简单学习

1. JVM 内存区域划分 一个运行起来的 Java 进程&#xff0c;就是一个 JVM 虚拟机&#xff0c;需要从操作系统申请一大块内存&#xff0c;就会把这个内存&#xff0c;划分成不同的区域&#xff0c;每个区域都有不同的作用. JVM 申请了一大块内存之后,也会划分成不同的内…

【算法刷题】Day30

1. 汉诺塔问题 原题链接 题干&#xff1a; 算法原理&#xff1a; 利用递归算法 将x柱子上的一堆盘子&#xff0c;借助 y柱子&#xff0c;转移到z 柱子上面 递归函数流程&#xff1a; 当前问题规模为 n1 时&#xff0c;直接将 A 中的最上面盘子挪到 C 中并返回递归将 A 中最…

spm用于颅骨去除和配准

1. 颅骨去除 出现这个界面就一直等待即可&#xff1a; segment的结果文件中会出现四个文件夹label、mri、report、surf 在mri文件中&#xff0c;mwp1是分割出来的灰质图像&#xff0c;mwp2是分割出来的白质图像&#xff0c;这两图像均是bias correction和空间配准后的。p0**…

Keepalive 解决nginx 的高可用问题

一 说明 keepalived利用 VRRP Script 技术&#xff0c;可以调用外部的辅助脚本进行资源监控&#xff0c;并根据监控的结果实现优先动态调整&#xff0c;从而实现其它应用的高可用性功能 参考配置文件&#xff1a; /usr/share/doc/keepalived/keepalived.conf.vrrp.localche…

机器学习——分类问题、logistic分类算法

之前我们学习的线性回归算法&#xff0c;适用于预测值y为连续值的情况下&#xff0c;但是在分类问题中&#xff0c;预测值y是个离散值&#xff0c;所以线性回归算法不适用。在这篇文章中&#xff0c;主要以二分类问题为例&#xff0c;介绍分类算法————logistic回归算法&…

Docker容器化解决方案(容器生命周期管理)

容器生命周期管理 1.run 创建一个新的容器并运行一个命令 语法格式docker run [OPTIONS] IMAGE [COMMAND][ARG...] 备注:其实跟docker create一样的语法格式&#xff0c;只不过可以运行容器甚至进入容器内部COMMAND: 需要在容器内执行的命令docker run执行流程首先在指定镜像…

基于单片机的老人防丢系统设计

目 录 摘 要 I Abstract II 引 言 3 1 系统总体架构 6 1.1方案设计与选择 6 1.2 系统架构设计 6 1.3 系统器件选择 7 2 系统硬件设计 9 2.1 单片机外围电路设计 9 2.2 LCD1602液晶显示电路设计 12 2.3 短信模块电路设计 14 2.4 GPS模块电路设计 14 2.5 电源与按键控制电路设计…

创邻科技获评环紫金港创新生态圈智源创新企业

3月1日&#xff0c;由杭州城西科创大走廊管理委员会指导&#xff0c;中共杭州市西湖区委员会、西湖区人民政府主办的“环紫金港创新生态圈”行动推进大会暨2024年紫金港科技城经济高质量发展大会在杭州举办。凭借重要的生态位置和创新业务成果&#xff0c;创邻科技受邀参会并被…

WPF ListBox滚动条一直在最底部

需求&#xff1a;解压文件 显示解压进度 private void AppendProcessText(string content){//注意这两段代码的先后顺序listBox01.Items.Add(content);listBox01.ScrollIntoView(listBox01.Items[listBox01.Items.Count - 1]);}

CubeMX使用教程(2)——点亮LED

在上一章&#xff0c;我们完成了CubeMX的环境配置&#xff0c;这一章我们通过CubeMX来完成点亮LED的工作。 通过LED原理图可知&#xff0c;如果我们要点亮LD1&#xff08;第一个灯&#xff09;&#xff0c;它对应开发板的PC8端口&#xff0c;因此我们应该在CubeMX中将PC8配置为…

Docker-完整项目的部署(保姆级教学)

目录 1 手动部署(白雪版) 1.1 创建网络 1.2 MySQL的部署 1.2.1 准备 1.2.2 部署 1.3 Java项目的部署 1.3.1 准备 1.3.1.1 将Java项目打成jar包 1.3.1.2 编写Dockerfile文件 1.3.2 部署 1.3.2.1 将jar包、Dockerfile文件放在linux同一个文件夹下 1.3.2.2 构建镜像 …

工业耐火砖的尺寸标准检测装置设计

目 录 摘 要 I Abstract II 引 言 1 1 控制系统设计 3 1.1 系统方案设计 3 1.2 系统工作原理 5 2 项目硬件设计 6 2.1 主控模块 6 2.2 检测模块 8 2.3 驱动模块 10 2.4 电源模块 11 2.5 按扭模块 13 2.6 指示灯模块 14 2.7 系统传送机构 14 2.8 总体设计 15 3 项目软件设计 17…

可以实现单个、两个、四个圆角的qml自定义控件

控件名: RadiusRectangle File: RadiusRectangle.qml import QtQuick 2.0Item {id: rootwidth: 100height: 100clip: trueproperty int itemRadius: 0property color itemColor: "red"property real itemOpacity: 1property int rightMargin: 0property int leftMar…

Finetuning Large Language Models: Sharon Zhou

Finetuning Large Language Models 课程地址&#xff1a;https://www.deeplearning.ai/short-courses/finetuning-large-language-models/ 本文是学习笔记。 Goal&#xff1a; Learn the fundamentals of finetuning a large language model (LLM). Understand how finetu…

143:vue+leaflet 在25833投影坐标下,加载一小块图像叠层数据

第143个 点击查看专栏目录 本示例是介绍如何在vue+leaflet, 自定义CRS,形成新的投影,这里是25833投影,并使用 L.Proj.imageOverlay的方法在地图上加载载一小块图像叠层数据。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式…

Redis冲冲冲——redis数据类型及对应的数据结构

目录 引出redis数据类型及对应的数据结构Redis入门1.Redis是什么&#xff1f;2.Redis里面存Java对象 Redis进阶1.雪崩/ 击穿 / 穿透2.Redis高可用-主从哨兵3.持久化RDB和AOF4.Redis未授权访问漏洞5.Redis里面安装BloomFilte Redis的应用1.验证码2.Redis高并发抢购3.缓存预热用户…