ChromeDriverManager的具体用法

ChromeDriverManagerwebdriver_manager 库的一部分,它用于自动管理 ChromeDriver 的下载和更新。使用 ChromeDriverManager 可以避免手动下载 ChromeDriver 并匹配系统中安装的 Chrome 浏览器版本。以下是 ChromeDriverManager 的基本用法:

步骤

1.安装 webdriver_manager 库:
pip install webdriver-manager
2.导入相关依赖
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
3.设置options参数(optional)

这边因为博主要做CI/CD 需要进行无头模式的设置所以是必需的

# 设置 Chrome 选项(如果需要)
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
4.用chromedrivermanager安装驱动 
# 使用 ChromeDriverManager 处理驱动安装
driver_path = ChromeDriverManager().install()
service = Service(driver_path)

代码解释:

  1. ChromeDriverManager().install():

    • 目标: 自动管理 ChromeDriver 的安装。

    • 功能: ChromeDriverManager()webdriver_manager 包中的一个类,它负责管理 Chrome 浏览器驱动的下载和更新。

    • 方法 install(): 此方法检查系统上是否已经安装了 ChromeDriver,以及它的版本是否与系统上的 Google Chrome 浏览器兼容。如果没有安装或者版本不正确,它会自动下载与当前 Chrome 浏览器版本兼容的 ChromeDriver。

    • 结果: install() 返回下载的 ChromeDriver 的文件路径。这是一个可执行文件的路径,通常是 chromedriver 二进制文件在你的本地机器上的位置。

  2. Service(driver_path):

    • 目标: 启动 Selenium 的 Chrome WebDriver 服务。

    • 功能: Service 是 Selenium 中的一个类,用于代表驱动程序的后台服务。它主要负责启动、终止和管理生命周期中的驱动进程。

    • 参数 driver_path: 这是 ChromeDriver 在本地系统上的路径,由 ChromeDriverManager().install() 返回。将此路径传递给 Service 构造函数来告诉 Selenium 如何找到和使用 ChromeDriver。

    • 使用: 当你创建一个 webdriver.Chrome 实例时,你可以将创建好的 Service 对象作为参数传递,使得 WebDriver 能够启动并与驱动程序正常通信。

整个过程:

  • 通过 ChromeDriverManager().install(),避免手动下载并管理 ChromeDriver 的版本问题。

  • 创建一个 Service 对象来确保在启动 WebDriver 时能够正确地引用和使用 ChromeDriver。

  • 最终用于初始化 WebDriver(例如 webdriver.Chrome(service=service))来启动一个新的浏览器实例。

这种方法简化了驱动安装的管理,确保了驱动程序与浏览器版本的兼容性,同时提高了代码的可维护性和稳定性。无论是在本地开发还是在CI/CD环境中,这种自动化驱动管理的方式都非常有用。

 

5.初始化并执行测试
# 正确的 WebDriver 初始化方式
driver = webdriver.Chrome(service=service)# 使用 WebDriver 做一些事情
driver.get("https://example.com")
print(driver.title)# 关闭浏览器
driver.quit()

基本用法示例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager# 使用 ChromeDriverManager 处理驱动安装
driver_path = ChromeDriverManager().install()
service = Service(driver_path)# 正确的 WebDriver 初始化方式
driver = webdriver.Chrome(service=service)# 使用 WebDriver 做一些事情
driver.get("https://stage.me.sap.com/createIssue/0")
print(driver.title)# 关闭浏览器
driver.quit()

注意:

在较新的 Selenium 版本中,webdriver.Chrome 的构造函数不再接受 executable_path 作为参数,而是使用 Service 对象来指定 ChromeDriver 的路径。 如果还用老的方法会出现下面的报错

# 创建 webdriver.Chrome 实例
driver = webdriver.Chrome(executable_path=driver_path)# 使用 WebDriver
driver.get("https://www.example.com")

TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path'

拓展(可自行了解

  • 自动下载和更新:

    • ChromeDriverManager().install() 方法会自动下载与系统安装的 Chrome 版本兼容的 ChromeDriver(如果未安装或版本过旧则更新)。
  • 版本控制:

    • 可以指定 ChromeDriver 的版本,比如使用 ChromeDriverManager(version='2.46').install() 来安装特定版本的驱动。
  • 自定义路径:

    • 如果需要把下载的驱动放在特定路径,可以在运行时设置相关的环境变量来管理下载目录:
    import os
    from webdriver_manager.chrome import ChromeDriverManageros.environ['WDM_LOCAL'] = '1'  # 启用本地目录使用
    os.environ['WDM_DIR'] = '/path/to/store/drivers'driver_path = ChromeDriverManager().install()
  • 日志和缓存控制:

    • webdriver_manager 默认会缓存下载的驱动,并在新版本发布时更新。对于调试和开发,可以通过环境变量控制日志输出和缓存政策。

 

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

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

相关文章

RPC、gRPC和HTTP的区别

RPC 只是一种屏蔽远程过程调用的设计,它与HTTP不是对立的,两者不是一个层面的概念。 RPC底层通信可以使用TCP实现(如Thrift),也可以使用HTTP实现(如gRPC),其本身并无限制。 1. 概念…

安装Pod网络插件时pod状态变为ImagePullBackOff

本文摘自于我的免费专栏《Kubernetes从0到1(持续更新)》请多关注 文章目录 先看案发现场解决过程如下原因剖析解决方法 先看案发现场 原因是在下载Pod网络插件的时候pod始终为ImagePullBackOff wget https://raw.githubusercontent.com/coreos/flannel…

蓝桥杯第十六届c组c++题目及个人理解

本篇文章只是部分题目的理解&#xff0c;代码和思路仅供参考&#xff0c;切勿当成正确答案&#xff0c;欢迎各位小伙伴在评论区与博主交流&#xff01; 题目&#xff1a;2025 题目解析 核心提取 要求的数中至少有1个0、2个2、1个5 代码展示 #include<iostream> #incl…

使用mermaidchart 显示graph LR

使用mermaidchart 显示graph LRMermaid Chart - Create complex, visual diagrams with text. A smarter way of creating diagrams.

基于计算机视觉的试卷答题区表格识别与提取技术

基于计算机视觉的试卷答题区表格识别与提取技术 摘要 本文介绍了一种基于计算机视觉技术的试卷答题区表格识别与提取算法。该算法能够自动从试卷图像中定位答题区表格&#xff0c;执行图像方向矫正&#xff0c;精确识别表格网格线&#xff0c;并提取每个答案单元格。本技术可…

SpringAI实现AI应用-自定义顾问(Advisor)

SpringAI实战链接 1.SpringAl实现AI应用-快速搭建-CSDN博客 2.SpringAI实现AI应用-搭建知识库-CSDN博客 3.SpringAI实现AI应用-内置顾问-CSDN博客 4.SpringAI实现AI应用-使用redis持久化聊天记忆-CSDN博客 5.SpringAI实现AI应用-自定义顾问&#xff08;Advisor&#xff09…

【HarmonyOS 5】App Linking 应用间跳转详解

目录 什么是 App Linking 使用场景 工作原理 如何开发 1.开通 App Linking 2.确定域名 3.服务端部署 applinking.json 文件 4.AGC绑定域名 5.项目配置 6.组装聚合链接 7.解析聚合链接中的参数 其他 如何获取应用ID 什么是 App Linking App Linking 是一款创建跨…

什么是变量提升?(形象的比喻)

当然&#xff01;可以用几个生活中的比喻来形象地解释变量提升&#xff1a; ​​1. 书架的占位符​​ 想象你有一个书架&#xff0c;但还没放书。 • 变量提升&#xff08;var&#xff09;&#xff1a; 你先在书架上贴了一个标签&#xff08;比如写“我的书”&#xff09;&…

C++面向对象编程入门:从类与对象说起(一)

C语言是面向过程&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题&#xff0c;而C面向的是对象&#xff0c;关注的是对象&#xff0c;将一件事拆解成多个对象&#xff0c;靠对象之间互交完成。 目录 类的定义 类的两种定义 …

uniapp tabBar 中设置“custom“: true 在H5和app中无效解决办法

uniapp小程序自定义底部tabbar&#xff0c;但是在转成H5和app时发现"custom": true 无效&#xff0c;原生tabbar会显示出来 解决办法如下 在tabbar的list中设置 “visible”:false 代码如下&#xff1a;"tabBar": {"custom": true,//"cust…

SpringBoot学生操行评分系统源码设计开发

概述 基于SpringBoot框架开发的学生操行评分系统完整项目&#xff0c;该系统采用主流技术栈开发&#xff0c;包含完善的评分管理功能模块&#xff0c;是学校管理、教育培训机构理想的数字化解决方案&#xff0c;非常适合作为设计参考或二次开发基础项目。 主要内容 5.1 管理…

从代码学习深度学习 - 单发多框检测(SSD)PyTorch版

文章目录 前言工具函数数据处理工具 (`utils_for_data.py`)训练工具 (`utils_for_train.py`)检测相关工具 (`utils_for_detection.py`)可视化工具 (`utils_for_huitu.py`)模型类别预测层边界框预测层连接多尺度预测高和宽减半块基础网络块完整的模型训练模型读取数据集和初始化…

基于STM32的温湿度光照强度仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)

这里写目录标题 **1.****主要功能****2.仿真设计****3.程序设计****4.设计报告****5.下载链接** 基于STM32的温湿度光照强度仿真设计(Proteus仿真程序设计设计报告讲解视频&#xff09; 仿真图Proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号…

SSH 服务部署指南

本指南涵盖 OpenSSH 服务端的安装、配置密码/公钥/多因素认证&#xff0c;以及连接测试方法。 适用系统&#xff1a;Ubuntu/Debian、CentOS/RHEL 等主流 Linux 发行版。 1. 安装 SSH 服务端 Ubuntu/Debian # 更新软件包索引 sudo apt update# 安装 OpenSSH 服务端 sudo apt i…

《Python星球日记》 第46天:决策树与随机森林

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、前言二、决策树算法原理1. 决策树简介2. 决策树的分裂准则(1) 信息熵与信息增益(2) 基尼不纯…

Vue2:引入公共JS,通过this调用

tools.js // 图片加上前缀 baseurl 是请求域名 img 是图片路径export function getimgurl(img) {return ${this.$baseurl}${img}}main.js import baseUrl from "/api/baseUrl.js" Vue.prototype.$baseurl baseUrlimport {getimgurl} from /api/tool.js; Vue.protot…

【Hot 100】 146. LRU 缓存

目录 引言LRU 缓存官方解题LRU实现&#x1f4cc; 实现步骤分解步骤 1&#xff1a;定义双向链表节点步骤 2&#xff1a;创建伪头尾节点&#xff08;关键设计&#xff09;步骤 3&#xff1a;实现链表基础操作操作 1&#xff1a;添加节点到头部操作 2&#xff1a;移除任意节点 步骤…

【Linux】swap交换分区管理

目录 一、Swap 交换分区的功能 二、swap 交换分区的典型大小的设置 2.1 查看交换分区的大小 2.1.1 free 2.1.2 cat /proc/swaps 或 swapon -s 2.1.3 top 三、使用交换分区的整体流程 3.1 案例一 3.2 案例二 一、Swap 交换分区的功能 计算机运行一个程序首先会将外存&am…

【计算机网络】用户从输入网址到网页显示,期间发生了什么?

1.URL解析 浏览器分解URL&#xff1a;https://www.example.com/page 协议&#xff1a;https域名&#xff1a;www.example.com路径&#xff1a;/page 2.DNS查询&#xff1a; 浏览器向DNS服务器发送查询请求&#xff0c;将域名解析为对应的IP地址。 3.CDN检查(如果有)&#…

架空输电线巡检机器人轨迹优化设计

架空输电线巡检机器人轨迹优化 摘要 本论文针对架空输电线巡检机器人的轨迹优化问题展开研究,综合考虑输电线复杂环境、机器人运动特性及巡检任务需求,结合路径规划算法、智能优化算法与机器人动力学约束,构建了多目标轨迹优化模型。通过改进遗传算法与模拟退火算法,有效…