第一种手动实现:

来源 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的两种方式的更多相关文章

  1. python模块的导入的两种方式区别详解

    Python 有两种导入模块的方法.两种都有用,你应该知道什么时候使用哪一种方法.一种方法,import module,另一种是from module import,下面是 from module i ...

  2. Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

    实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...

  3. Python 防止mysql 注入的两种方式

    Python防止sql注入一般有两种方法 1.escape_string   MySQLdb.escape_string(param) 注意:如果报错出现 'ascii' codec can't en ...

  4. python安装第三方包的两种方式

    最近研究QQ空间.微博的(爬虫)模拟登录,发现都涉及RSA算法.于是需要下一个RSA包(第三方包).折腾了很久,主要是感觉网上很多文章对具体要在哪里操作写得不清楚.这里做个总结,以免自己哪天又忘了. ...

  5. python数字转换为字符串的两种方式

    主要包括两种形式进行转换: 第一种是str(),将值转换为用户便于阅读的形式: 另一种是repr(),将值转换为合法的python表达式. >>> print repr(" ...

  6. Appium 自动化测试配置wda的两种方式。

    tips:WebDriverAgent是Appium1.6.3以后版本新添加的模块,为了让appium与iPhone(基于xcuitest)设备进行通信而添加的.但是,这个模块在是一个独立的项目,在使 ...

  7. KETTLE 更新表的两种方式-更新控件和sql更新 2种方式的实现比较

    在实际工作中,我们有可能遇见只更新不插入的情况,可以由以下2种方式去实现: 1.更新控件 如下图所示,根据id字段,更新name和cjsj时间字段 该控件不足的地方是,用来查询关键值得字段不够灵活,一 ...

  8. python连接redis数据库的两种方式

    代码: # __author__ = 'STEVEN' import redis # 方式1,直接连接 # r = redis.Redis(host='192.168.43.22',port=6379 ...

  9. python list dict 去重的两种方式

    def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item ...

  10. fetch更新本地仓库两种方式:

    来源:https://www.cnblogs.com/chenlogin/p/6592228.html //方法一 $ git fetch origin master //从远程的origin仓库的m ...

随机推荐

  1. mysql数据库新建用户,并赋予权限

    新建用户: CREATE USER 'testuser'@'LOCALHOST' IDENTIFIED BY '123456'; 赋予权限: grant select on *.* to 'testu ...

  2. 数据库基础day1

    数据库基础 MySQL概述 SQL 函数 概念 函数 是指一段可以直接被另一段程序调用的程序或代码. 3.1字符串函数 函数 功能 CONCAT(S1,S2,...Sn) 字符串拼接,将S1,S2,. ...

  3. Jmeter使用文档(循环怎么用)

    Jmeter使用文档(循环怎么用) 基础用法 修改语言 Jmeter之界面语言设置 下面使用简体中文的命名进行说明 打开日志 启动后,右上角有个黄色的感叹号图标,点击即可打开即时日志 如果没有看到重启 ...

  4. Mac技术服务, 感谢 点赞打赏

    ​ 首先,非常感谢大家对我的支持和鼓励. 如果需要单独解决Mac问题,您也可以选择付费服务,感谢大家的理解与支持! * 普通问题/软件安装:10元--100元每个(根据具体问题由您而定): * 普通问 ...

  5. ggplot2绘制饼图

    # 加载 ggplot2 包 library(ggplot2) # 加载数据 data <- data.frame(category = c("A", "B&quo ...

  6. canvas 学习笔记

    1.利用上下文对象进行绘制画笔 var canvas=canvas.getContext('2d') 2.绘制路径 canvas.rect(30,30,300,300) 3.填充 canvas.fil ...

  7. echarts:双y轴图表刻度均匀分布问题

    今天分享一个小问题,内容不多. 双y轴图表中,为了图表的美观,经常会隐藏一侧的y轴刻度线,仅显示一侧的刻度线.那么问题就来了,两个y轴的数据数值大小不同,常常会导致刻度线的刻度分布不均匀,该如何解决呢 ...

  8. Docker私服(Registry)

    Docker Registry安装 #拉取镜像 docker pull registry #创建文件夹 mkdir -p /var/my_registry #启动容器 docker run -d -- ...

  9. 如何进行多平台部署Client和Server详细讲解

    一:signalR把console用做客户端访问服务端方法 1:新建一个控制台应用程序(ClientConsole) 2:用nuget安装SignalR.Client(必须,下面是nuget命令) I ...

  10. FTP主动模式(Port)和被动模式(Passive)的区别

    1.FTP的PORT(主动模式): PORT中文称为主动模式,工作的原理: FTP客户端(1024以上端口)连接到FTP服务器的21端口,发送用户名和密码登录, 登录成功后要list列表或者读取数据时 ...