python自动更新chromedriver与chrome兼容

在使用selenium进行自动化测试时,遇到Chrome自动更新导致ChromeDriver不兼容的问题。为了解决这个问题,作者通过编写Python脚本,自动查询Chrome版本,比较本地ChromeDriver版本,并从淘宝npm镜像获取匹配的最新ChromeDriver版本,实现下载和解压,简化了手动更新的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用selenium自动化时,一个很烦的问题就是chrome会自动更新,然后chromedriver的版本就会不兼容,每次要查询版本下载解压很烦,因此开始寻找如何用脚本自动更新。

网上找到了一些脚本,但是感觉略显繁琐,因此我就自己修改了一下,逻辑很简洁:

  1. 通过注册表查询chrome版本号;
  2. 查询本地的chromedriver版本号;
  3. 查看两个版本号前三位是否一致,若不一致就到 http://npm.taobao.org/mirrors/chromedriver/ 查询当前chrome匹配的最新chromedriver版本号;
  4. 合成下载链接,最后下载并解压。
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')
        retur
### 如何用 Python 实现 Chromedriver自动更新 为了使 Python 脚本能自动更新 ChromeDriver 并保持其当前安装的 Google Chrome 浏览器版本一致,可以利用 `webdriver-manager` 库或其他自定义逻辑来完成这一目标。以下是详细的解决方案: #### 使用 `webdriver-manager` 自动管理 ChromeDriver 版本 `webdriver-manager` 是一个非常方便的第三方库,可以通过 pip 安装并快速集成到项目中[^1]。 ```bash pip install webdriver-manager ``` 在代码中引入此库后,可以直接调用 `ChromeDriverManager().install()` 方法获取最新兼容ChromeDriver 可执行文件路径。例如: ```python from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(executable_path=ChromeDriverManager().install()) ``` 上述代码会自动检测本地已有的 ChromeDriver 是否匹配当前系统的 Chrome 浏览器版本。如果不匹配,则会从官方源下载最新的适配版本。 --- #### 解决高版本号后的驱动缺失问题 然而,在某些情况下(如 Chrome 114 或更高版本),可能发现默认的 `ChromeDriverManager().install()` 方法无法正常工作,因为对应版本的驱动尚未被维护者及时更新至官方存储库[^2]。此时可采取以下措施解决: ##### 手动指定镜像源 通过设置环境变量或者直接修改请求 URL 来切换到其他可用的镜像站点,比如国内常用的淘宝镜像仓库[^3]: ```python import os from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.utils import ChromeType os.environ['WDM_LOG_LEVEL'] = '0' # 关闭日志输出 os.environ['WDM_LOCAL'] = '1' # 启用本地缓存模式 # 设置镜像地址 (替换为实际有效的URL) mirror_url = "https://npm.taobao.org/mirrors/chromedriver/" driver = webdriver.Chrome( executable_path=ChromeDriverManager(chrome_type=ChromeType.GOOGLE, cache_valid_range=7).install(), options=None, ) print(f"成功加载 ChromeDriver: {driver.capabilities}") ``` 注意:由于部分资源可能会因政策原因而不可访问,请确保所选镜像是合法且可靠的。 --- #### 编写独立脚本定期检查更新状态 除了依赖于外部工具外,还可以编写一段专门用于监控和升级 ChromeDriver 的辅助函数。下面是一个简单示例: ```python import requests import subprocess import re def get_latest_chrome_version(): """ 获取当前系统上安装的 Chrome 主版本号 """ try: result = subprocess.run(['google-chrome', '--version'], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) version_str = result.stdout.decode('utf-8').strip() match = re.search(r'\d+\.\d+', version_str) if match: return int(match.group(0).split('.')[0]) except Exception as e: pass raise RuntimeError("未能找到合适的 Chrome 浏览器版本") def download_and_install_driver(version): """ 下载特定版本的 ChromeDriver""" base_url = f"https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{version}" response = requests.get(base_url) if not response.ok or not response.text.strip(): raise ValueError(f"No driver found for chrome v{version}") latest_release = response.text.strip() url = f'https://chromedriver.storage.googleapis.com/{latest_release}/chromedriver_linux64.zip' local_filename = "/tmp/chromedriver.zip" with open(local_filename, 'wb') as file_handle: r = requests.get(url, stream=True) total_length = int(r.headers.get('content-length')) if total_length is None: # no content length header file_handle.write(r.content) else: dl = 0 for data in r.iter_content(chunk_size=4096): dl += len(data) file_handle.write(data) if __name__ == "__main__": current_browser_ver = get_latest_chrome_version() print(f"Detected installed browser major version: {current_browser_ver}") download_and_install_driver(current_browser_ver) ``` 以上脚本适用于 Linux 系统下的场景;对于 Windows 和 macOS 用户而言,需相应调整命令行参数以及解压方式等内容[^5]。 --- #### 总结 无论是采用成熟的第三方模块还是自行构建专属流程,均能达成自动化部署的目的。推荐优先尝试前者以减少额外的工作量,除非遇到特殊需求才考虑后者方案。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值