Selenium webdriver_manager根据浏览器版本自动下载对应驱动程序
前言
- webdriver_manager是什么?
webdriver_manager 是 Python 中的一个库,用于管理 Web 驱动程序。它的作用是自动下载和设置不同浏览器(如 Chrome、Firefox、Edge 等)的 Web 驱动程序,以便在自动化测试中使用这些浏览器。
在进行 Selenium 测试时,需要一个与浏览器相匹配的 Web 驱动程序,以便控制和操作浏览器。webdriver_manager 为您提供了一种简便的方式,可以自动检测所需浏览器的版本并下载相应的 Web 驱动程序。这样,您就不需要手动下载和设置 Web 驱动程序,可以减轻您的负担,提高测试的可靠性和可维护性。
一、导入模块
pip install webdriver_manager
pip install Selenium
二、Chrome用法
# Selenium4.0以下版本使用该方法
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager# 使用 ChromeDriverManager 安装 ChromeDriver,并返回驱动程序的路径
driver_path = ChromeDriverManager().install()
# 打印驱动程序路径
print(driver_path)# 创建 Chrome WebDriver,并指定驱动路径
driver = webdriver.Chrome(executable_path=driver_path)
# 打开百度网页
driver.get("https://www.baidu.com")
# Selenium4.0以上版本使用该方法
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager# 使用 ChromeDriverManager 安装 ChromeDriver,并返回驱动程序的路径
driver_path = ChromeDriverManager().install()
# 打印驱动程序的路径
print(driver_path)# 创建 ChromeDriver 服务,并指定驱动程序的路径
service = Service(driver_path)
# 创建 Chrome WebDriver,并指定服务
driver = webdriver.Chrome(service=service)
# 打开百度网页
driver.get("https://www.baidu.com")
- 下载驱动到指定目录中
# Selenium4.0以上版本使用该方法
import os
import shutil
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager# 指定驱动目标位置
folder_path = r'C:\Users\admin\Desktop\run'
# 路径拼接
file_path = os.path.join(folder_path, 'chromedriver.exe')# 使用ChromeDriverManager安装ChromeDriver,并获取驱动程序的路径
download_driver_path = ChromeDriverManager().install()
# 复制文件到目标位置
shutil.copy(download_driver_path, folder_path)# 创建Chrome WebDriver,并指定驱动路径
driver = webdriver.Chrome(service=Service(file_path))
# 打开百度网页
driver.get("https://www.baidu.com")
- 以下代码是判断谷歌浏览器版本和谷歌驱动版本是否一致,不一致则重新下载
# Selenium4.0以上版本使用该方法
import os
import shutil
import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManagerdef determine_google_drive():"""判断谷歌驱动版本是否和谷歌浏览器版本一致"""# 谷歌浏览器可执行文件的完整路径chrome_path = r'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'# 指定谷歌驱动目标位置folder_path = r'C:\Users\admin\Desktop\run'# 驱动名称file_name = 'chromedriver.exe'# 路径拼接file_path = os.path.join(folder_path, file_name)if os.path.exists(file_path):# 获取chromedriver.exe版本(谷歌浏览器驱动)result = subprocess.run([file_path, '--version'], capture_output=True, text=True)driverversion = '.'.join(result.stdout.strip().split(' ')[1].split('.')[:-1])# 获取chrome.exe版本(谷歌浏览器)command = f'wmic datafile where name="{chrome_path}" get Version /value'result_a = subprocess.run(command, capture_output=True, text=True, shell=True)output = result_a.stdout.strip()chromeversion = '.'.join(output.split('=')[1].split('.')[0:3])# 判断版本是否一致,不一致就重新下载if driverversion != chromeversion:# 使用ChromeDriverManager安装ChromeDriver,并获取驱动程序的路径download_driver_path = ChromeDriverManager().install()# 复制文件到目标位置shutil.copy(download_driver_path, folder_path)else:print("版本一致,无需重新下载!")else:download_driver_path = ChromeDriverManager().install()shutil.copy(download_driver_path, folder_path)return file_pathif __name__ == '__main__':# 创建Chrome WebDriver,并指定驱动路径driver = webdriver.Chrome(service=Service(determine_google_drive()))# 打开百度网页driver.get("https://www.baidu.com")
三、Edge用法
# Selenium4.0以下版本使用该方法
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManagerdriver = webdriver.Edge(executable_path=EdgeChromiumDriverManager().install())
driver.get("https://www.baidu.com")
# Selenium4.0以上版本使用该方法
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManagerservice = Service(EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service)
driver.get("https://www.baidu.com")
四、Firefox用法
# Selenium4.0以下版本使用该方法
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManagerdriver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
driver.get("https://www.baidu.com")
# Selenium4.0以上版本使用该方法
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManagerservice = Service(GeckoDriverManager().install())
driver = webdriver.Firefox(service=service)
driver.get("https://www.baidu.com")
相关文章:
Selenium webdriver_manager根据浏览器版本自动下载对应驱动程序
前言 webdriver_manager是什么? webdriver_manager 是 Python 中的一个库,用于管理 Web 驱动程序。它的作用是自动下载和设置不同浏览器(如 Chrome、Firefox、Edge 等)的 Web 驱动程序,以便在自动化测试中使用这些浏…...
2023 - java - 强制类型转换和装箱
强制类型转换和装箱: 在 Java 中,(Integer) 和(int) 是两个不同的类型转换操作符,它们的效果是不一样的。 int a (Integer) t.getContent(); 这条语句使用了装箱(Boxing)操作,将一个整数对象(…...
使用ansible自动化部署Kubernetes
使用 kubeasz 部署 Kubernetes 集群 服务器列表: IP主机名角色192.168.100.142kube-master1,kube-master1.suosuoli.cnK8s 集群主节点 1192.168.100.144kube-master2,kube-master2.suosuoli.cnK8s 集群主节点 2192.168.100.146kube-master3,kube-master3.suosuoli…...
k8s v1.27.4 部署metrics-serverv:0.6.4,kube-prometheus
只有一个问题,原来的httpGet存活、就绪检测一直不通过,于是改为tcpSocket后pod正常。 wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml修改后的yaml文件,镜像修改为阿里云 apiVersion: …...
6-模板初步使用
官网: 中文版: 介绍-Jinja2中文文档 英文版: Template Designer Documentation — Jinja Documentation (2.11.x) 模板语法 1. 模板渲染 (1) app.py 准备数据 import jsonfrom flask import Flask,render_templateimport settingsapp Flask(__name__) app.config.from_obj…...
STM32CubeMX配置STM32F103 USB Virtual Port Com(HAL库开发)
1.配置外部高速晶振 2.勾选USB功能 3.将USB模式配置Virtual Port Com 4.将系统主频配置为72M,USB频率配置为48M. 5.配置好项目名称,开发环境,最后获取代码。 6.在CDC_Receive_FS函数中写入USB发送函数。这样USB接收到的数据就好原样发送。 7.将串口助手打…...
RocketMQ与Kafka对比(18项差异)
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用MySQL作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kafka这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,Kafka无限消息…...
英文翻译照片怎么做?掌握这个方法轻松翻译
在现代社会中,英文已经成为了一种全球性的语言,因此,我们在阅读文章或者查看图片时,经常会遇到英文的内容。为了更好地理解这些英文内容,我们需要将其翻译成中文。在本文中,我将探讨图片中英文内容翻译的方…...
Linux介绍
目录 unix linux的版本号 linux对unix的继承 linux特性:安全性高 unix Unix是一个先进的、多用户、多任务的操作系统,被广泛用于服务器、工作站和移动设备。以下是Unix的一些关键特点和组件: 多用户系统:允许多个用户同时访…...
计算机竞赛 卷积神经网络手写字符识别 - 深度学习
文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…...
[Go版]算法通关村第十三关白银——数组实现加法和幂运算
目录 数组实现加法专题题目:数组实现整数加法思路分析:复杂度:Go代码 题目:字符串加法思路分析:复杂度:Go代码 题目:二进制加法思路分析:复杂度:Go代码 幂运算专题题目&a…...
React笔记[tsx]-解决Property ‘frames‘ does not exist on type ‘Readonly<{}>‘
浏览器报错如下: 编辑器是这样的: 原因是React.Component<any>少了后面的any,改成这样即可: export class CustomFrame extends React.Component<any, any>{............ }...
ThinkPHP6.0+ 使用Redis 原始用法
composer 安装 predis/predis 依赖,或者安装php_redis.dll的扩展。 我这里选择的是predis/predis 依赖。 composer require predis/predis 进入config/cache.php 配置添加redis缓存支持 示例: <?php// -----------------------------------------…...
SRM系统询价竞价管理:优化采购流程的全面解析
SRM系统的询价竞价管理模块是现代企业采购管理中的重要工具。通过该模块,企业可以实现供应商的询价、竞价和合同管理等关键环节的自动化和优化。 一、概述 SRM系统是一种用于管理和优化供应商关系的软件系统。它通过集成各个环节,包括供应商信息管理、询…...
c++选择题笔记
局部变量能否和全局变量重名?可以,局部变量会屏蔽全局变量。在使用全局变量时需要使用 ":: "。拷贝构造函数:参数为同类型的对象的常量引用的构造函数函数指针:int (*f)(int,int) & max; 虚函数:在基类…...
Android2:构建交互式应用
一。创建项目 项目名Beer Adviser 二。更新布局 activity_main.xml <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"…...
ChatGLM-6B微调记录
目录 GLM-130B和ChatGLM-6BChatGLM-6B直接部署基于PEFT的LoRA微调ChatGLM-6B GLM-130B和ChatGLM-6B 对于三类主要预训练框架: autoregressive(无条件生成),GPT的训练目标是从左到右的文本生成。autoencoding(语言理解…...
Linux Kernel 4.12 或将新增优化分析工具
到 7 月初,Linux Kernel 4.12 预计将为修复所有安全漏洞而奠定基础,另外新增的是一个分析工具,对于开发者优化启动时间时会有所帮助。 新的「个别任务统一模型」(Per-Task Consistency Model)为主要核心实时修补&#…...
【30天熟悉Go语言】10 Go异常处理机制
作者:秃秃爱健身,多平台博客专家,某大厂后端开发,个人IP起于源码分析文章 😋。 源码系列专栏:Spring MVC源码系列、Spring Boot源码系列、SpringCloud源码系列(含:Ribbon、Feign&…...
飞机打方块(四)游戏结束
一、游戏结束显示 1.新建节点 1.新建gameover节点 2.绑定canvas 3.新建gameover容器 4.新建文本节点 2.游戏结束逻辑 Barrier.ts update(dt: number) {//将自身生命值取整let num Math.floor(this.num);//在Label上显示this.num_lb.string num.toString();//获取GameCo…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
