Python自动化测试更新selenium的两种方式
第一种手动实现:
来源 https://www.codeleading.com/article/73395290617/
import os
import re
import winreg
import zipfile
import requests base_url = 'http://npm.taobao.org/mirrors/chromedriver/'
version_re = re.compile(r'^[1-9]\d*\.\d*.\d*') # 匹配前3位版本号的正则表达式 def getChromeVersion():
"""通过注册表查询chrome版本"""
try:
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'Software\\Google\\Chrome\\BLBeacon')
value, t = winreg.QueryValueEx(key, 'version')
return version_re.findall(value)[0] # 返回前3位版本号
except WindowsError as e:
# 没有安装chrome浏览器
return "1.1.1" def getChromeDriverVersion():
"""查询Chromedriver版本"""
outstd2 = os.popen('cd D:\Python\chromedriver && chromedriver --version').read()
try:
version = outstd2.split(' ')[1]
version = ".".join(version.split(".")[:-1])
return version
except Exception as e:
return "0.0.0" def getLatestChromeDriver(version):
# 获取该chrome版本的最新driver版本号
url = f"{base_url}LATEST_RELEASE_{version}"
latest_version = requests.get(url).text
print(f"与当前chrome匹配的最新chromedriver版本为: {latest_version}")
# 下载chromedriver
print("开始下载chromedriver...")
download_url = f"{base_url}{latest_version}/chromedriver_win32.zip"
file = requests.get(download_url)
with open("D:\Python\chromedriver\chromedriver.zip", 'wb') as zip_file: # 保存文件到脚本所在目录
zip_file.write(file.content)
print("下载完成.")
# 解压
f = zipfile.ZipFile("D:\Python\chromedriver\chromedriver.zip", 'r')
for file in f.namelist():
f.extract(file,'D:\Python\chromedriver')
print("解压完成.") def checkChromeDriverUpdate():
chrome_version = getChromeVersion()
print(f'当前chrome版本: {chrome_version}')
driver_version = getChromeDriverVersion()
print(f'当前chromedriver版本: {driver_version}')
if chrome_version == driver_version:
print("版本兼容,无需更新.")
return
print("chromedriver版本与chrome浏览器不兼容,更新中>>>")
try:
getLatestChromeDriver(chrome_version)
print("chromedriver更新成功!")
except requests.exceptions.Timeout:
print("chromedriver下载失败,请检查网络后重试!")
except Exception as e:
print(f"chromedriver未知原因更新失败: {e}") if __name__ == "__main__":
checkChromeDriverUpdate()
第二种轮子 python库:
https://github.com/SergeyPirogov/webdriver_manager
#安装依赖 pip install webdriver_manager.chrome
#代码 from webdriver_manager.chrome import ChromeDriverManager
browser = webdriver.Chrome(ChromeDriverManager().install())
Python自动化测试更新selenium的两种方式的更多相关文章
- python模块的导入的两种方式区别详解
Python 有两种导入模块的方法.两种都有用,你应该知道什么时候使用哪一种方法.一种方法,import module,另一种是from module import,下面是 from module i ...
- Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- Python 防止mysql 注入的两种方式
Python防止sql注入一般有两种方法 1.escape_string MySQLdb.escape_string(param) 注意:如果报错出现 'ascii' codec can't en ...
- python安装第三方包的两种方式
最近研究QQ空间.微博的(爬虫)模拟登录,发现都涉及RSA算法.于是需要下一个RSA包(第三方包).折腾了很久,主要是感觉网上很多文章对具体要在哪里操作写得不清楚.这里做个总结,以免自己哪天又忘了. ...
- python数字转换为字符串的两种方式
主要包括两种形式进行转换: 第一种是str(),将值转换为用户便于阅读的形式: 另一种是repr(),将值转换为合法的python表达式. >>> print repr(" ...
- Appium 自动化测试配置wda的两种方式。
tips:WebDriverAgent是Appium1.6.3以后版本新添加的模块,为了让appium与iPhone(基于xcuitest)设备进行通信而添加的.但是,这个模块在是一个独立的项目,在使 ...
- KETTLE 更新表的两种方式-更新控件和sql更新 2种方式的实现比较
在实际工作中,我们有可能遇见只更新不插入的情况,可以由以下2种方式去实现: 1.更新控件 如下图所示,根据id字段,更新name和cjsj时间字段 该控件不足的地方是,用来查询关键值得字段不够灵活,一 ...
- python连接redis数据库的两种方式
代码: # __author__ = 'STEVEN' import redis # 方式1,直接连接 # r = redis.Redis(host='192.168.43.22',port=6379 ...
- python list dict 去重的两种方式
def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item ...
- fetch更新本地仓库两种方式:
来源:https://www.cnblogs.com/chenlogin/p/6592228.html //方法一 $ git fetch origin master //从远程的origin仓库的m ...
随机推荐
- mysql数据库新建用户,并赋予权限
新建用户: CREATE USER 'testuser'@'LOCALHOST' IDENTIFIED BY '123456'; 赋予权限: grant select on *.* to 'testu ...
- 数据库基础day1
数据库基础 MySQL概述 SQL 函数 概念 函数 是指一段可以直接被另一段程序调用的程序或代码. 3.1字符串函数 函数 功能 CONCAT(S1,S2,...Sn) 字符串拼接,将S1,S2,. ...
- Jmeter使用文档(循环怎么用)
Jmeter使用文档(循环怎么用) 基础用法 修改语言 Jmeter之界面语言设置 下面使用简体中文的命名进行说明 打开日志 启动后,右上角有个黄色的感叹号图标,点击即可打开即时日志 如果没有看到重启 ...
- Mac技术服务, 感谢 点赞打赏
首先,非常感谢大家对我的支持和鼓励. 如果需要单独解决Mac问题,您也可以选择付费服务,感谢大家的理解与支持! * 普通问题/软件安装:10元--100元每个(根据具体问题由您而定): * 普通问 ...
- ggplot2绘制饼图
# 加载 ggplot2 包 library(ggplot2) # 加载数据 data <- data.frame(category = c("A", "B&quo ...
- canvas 学习笔记
1.利用上下文对象进行绘制画笔 var canvas=canvas.getContext('2d') 2.绘制路径 canvas.rect(30,30,300,300) 3.填充 canvas.fil ...
- echarts:双y轴图表刻度均匀分布问题
今天分享一个小问题,内容不多. 双y轴图表中,为了图表的美观,经常会隐藏一侧的y轴刻度线,仅显示一侧的刻度线.那么问题就来了,两个y轴的数据数值大小不同,常常会导致刻度线的刻度分布不均匀,该如何解决呢 ...
- Docker私服(Registry)
Docker Registry安装 #拉取镜像 docker pull registry #创建文件夹 mkdir -p /var/my_registry #启动容器 docker run -d -- ...
- 如何进行多平台部署Client和Server详细讲解
一:signalR把console用做客户端访问服务端方法 1:新建一个控制台应用程序(ClientConsole) 2:用nuget安装SignalR.Client(必须,下面是nuget命令) I ...
- FTP主动模式(Port)和被动模式(Passive)的区别
1.FTP的PORT(主动模式): PORT中文称为主动模式,工作的原理: FTP客户端(1024以上端口)连接到FTP服务器的21端口,发送用户名和密码登录, 登录成功后要list列表或者读取数据时 ...