当前位置: 首页 > news >正文

关于 WebDriver Manager (自动管理浏览器驱动)

它是什么?为什么需要它?
传统方式需要手动查找、下载、配置环境变量来使用浏览器驱动(如 ChromeDriver),**且浏览器自动更新后,驱动版本不匹配又会报错。**webdriver-manager 就是一个能自动帮你完成这些过程的 Python 库6。它解决了因Chrome浏览器升级,driver需要同步升级,要重新下载驱动的问题

它是如何工作的?

当你第一次在代码中调用 ChromeDriverManager().install() 时,它会:

1、检测:自动检测你系统上已安装的 Chrome 浏览器版本 (例如你的 139.0.7258.128)6。

2、下载:根据检测到的版本,自动从官方仓库(或国内镜像)下载完全匹配的 ChromeDriver6。

3、缓存与管理:将驱动下载到它的缓存目录(如 ~/.wdm/drivers/),并返回该驱动的完整路径6。

4、匹配验证:它确保下载的驱动程序版本与已安装的浏览器版本兼容,从而避免常见的版本不匹配错误15。

下次再运行时,它会先检查缓存中是否有匹配的驱动,有则直接使用,无需重新下载。

还需要手动配置环境变量吗?
不需要。webdriver-manager 在后台自动处理了路径问题。你只需要在创建浏览器实例时,使用它提供的路径即可。

如何使用?(与 Selenium 结合)
你的代码会变得非常简洁,无需手动指定驱动路径:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager# 自动下载/获取匹配的ChromeDriver路径,并创建Service对象
service = ChromeService(ChromeDriverManager().install())
# 创建浏览器实例,传入service对象 (Selenium 4 推荐写法)
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com")
# ... 你的自动化操作
driver.quit()

对于 Selenium 3,用法稍有不同9:

python
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(executable_path=ChromeDriverManager().install())

如何在 pytest-selenium 中使用?
pytest-selenium 插件本身提供了一个内置的 selenium fixture 来驱动浏览器。默认情况下,它可能期望手动指定驱动路径或使用系统 PATH 中的驱动。

若要让 pytest-selenium 也使用 webdriver-manager,通常需要在 pytest 的配置文件(如 conftest.py)中重写或自定义提供 driver 的 fixture。一个简单的例子:

# conftest.py
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager@pytest.fixture(scope="session")
def chrome_driver():# 自动管理驱动并创建Serviceservice = ChromeService(ChromeDriverManager().install())driver = webdriver.Chrome(service=service)yield driverdriver.quit()@pytest.fixture
def selenium(chrome_driver):# 使用自定义的chrome_driver fixture替代默认的selenium driveryield chrome_driver# 此处可根据需要决定是否在每条测试后退出浏览器# 如果希望每次测试都用新会话但不关闭浏览器,可以注释掉 quit# chrome_driver.quit() 

从技术角度看,直接使用chrome_driver确实能工作。但关键在于pytest-selenium插件的工作原理:它默认提供了一个名为"selenium"的内置fixture,很多测试用例和第三方库都依赖这个特定的fixture名称。如果我们直接重命名,就会破坏这种约定。
用户可能还隐含地担心代码冗余和维护成本。需要向ta解释这不是重复造轮子,而是为了:1)保持与现有生态的兼容性;2)实现不同生命周期的组合(session级的驱动实例+function级的清理逻辑);3)保留未来替换浏览器类型的灵活性。
在你的测试文件中,依然直接使用 selenium fixture 即可:

def test_example(selenium):selenium.get("https://example.com")assert "Example" in selenium.title

在这里插入图片描述

http://www.xdnf.cn/news/1346041.html

相关文章:

  • 当下一次攻击发生前:微隔离如何守护高敏数据,防范勒索攻击下的数据泄露风险!
  • 一、Python IDLE安装(python官网下的环境安装)
  • 腾讯云EdgeOne安全防护:快速上手,全面抵御Web攻击
  • Datawhale AI夏令营---coze空间共学
  • 【图像算法 - 21】慧眼识虫:基于深度学习与OpenCV的农田害虫智能识别系统
  • 关于日本服务器的三种线路讲解
  • 在自动驾驶中ESKF实现GINS时,是否将重力g作为变量考虑进去的目的是什么?
  • ASPICE过程能力确定——度量框架
  • Unity--判断一个点是否在扇形区域里面(点乘和叉乘的应用)
  • 视觉语言大模型应用开发——基于 CLIP、Gemini 与 Qwen2.5-VL 的视频理解内容审核全流程实现
  • ref 简单讲解
  • flutter geolocator Android国内定位失败问题解决
  • JVM 调优全流程案例:从频繁 Full GC 到百万 QPS 的实战蜕变
  • 【大模型本地运行与部署框架】Ollama的cmd常用命令
  • Linux 软件编程(九)网络编程:IP、端口与 UDP 套接字
  • 【Python】两条命令永久切国内源
  • 本地组策略编辑器图形化工具
  • 力扣(在排序数组中查找元素的第一个和最后一个位置)
  • 当我们想用GPU(nlp模型篇)
  • 开源 python 应用 开发(十)音频压缩
  • 开源 python 应用 开发(十一)短语音转文本
  • ZKmall模块商城的跨境电商支付安全方案:加密与权限的双重防护
  • 数据结构 -- 树
  • STM32G4-比较器
  • 亚马逊老品怎么再次爆发流量?
  • 计算机内存中的整型存储奥秘、大小端字节序及其判断方法
  • 量子计算基础
  • 豆包AI PPT与秒出PPT对比评测:谁更适合你?
  • 树莓派安装pyqt5 opencv等库一些问题
  • 使用 YAML 文件,如何优雅地删除 k8s 资源?