python自动更新chromediver驱动与chrome匹配

本文介绍了一款用于分析数据并生成图片的小工具,在使用过程中遇到因Chrome浏览器版本更新导致的截图失败问题。文章提供了解决方案,即通过自动检测Chrome浏览器和Chromedriver版本,并在不匹配时自动下载和更新Chromedriver。

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

问题

做了一个分析数据生成图片的小工具,隔一段时间就会截图失败,因为chrome自动更新的版本,工具中的chromedirver与之已经不匹配了。

解决

因为使用者不是一个人且非专业人士,手动解决不可取,自动更新比较靠谱,思路很简单:

1、查询当前chrome版本

2、查询当前chromedriver版本

3、比较两者是否一致,不一致则更新chromedirver驱动

代码

与更新功能相关的包(从一堆代码中摘取出来的,可能有漏的,缺哪个自己安装就好)

import os
from init.Logger import log

import re  # 正则
import winreg  # windows注册表
import zipfile  # 压缩解压
import requests


#下载chromedirver的镜像地址
base_url = 'http://npm.taobao.org/mirrors/chromedriver/'
# 匹配前3位版本号的正则表达式
version_re = re.compile(r'^[1-9]\d*\.\d*.\d*')

# 通过注册表查询chrome版本
def getChromeVersion():
  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"

# 查询Chromedriver版本
def getChromeDriverVersion():
  outstd2 = os.popen('chromedriver --version').read()
  try:
    version = outstd2.split(' ')[1]
    version = ".".join(version.split(".")[:-1])
    return version
  except Exception as e:
    return "0.0.0"

# 检查chromedirver用不用更新
def checkChromeDriverUpdate():
  chrome_version = getChromeVersion()
  log.info(f'当前chrome版本: {chrome_version}')
  driver_version = getChromeDriverVersion()
  log.info(f'当前chromedriver版本: {driver_version}')
  if chrome_version == driver_version:
    log.info("版本兼容,无需更新.")
    return
  log.info("chromedriver版本与chrome浏览器不兼容,更新中>>>")
  try:
    getLatestChromeDriver(chrome_version)
    log.info("chromedriver更新成功!")
  except requests.exceptions.Timeout:
    log.info("chromedriver下载失败,请检查网络后重试!")
  except Exception as e:
    log.info(f"chromedriver未知原因更新失败: {e}")


# 获取该chrome版本的最新driver版本号
def getLatestChromeDriver(version):
  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("chromedriver.zip", 'wb') as zip_file:  # 保存文件到脚本所在目录
    zip_file.write(file.content)
  print("下载完成.")
  # 解压
  f = zipfile.ZipFile("chromedriver.zip", 'r')
  for file in f.namelist():
    f.extract(file)
  print("解压完成.")

结果:

兼容

 不兼容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值