乐趣区

关于python:python自动更新chromediver驱动与chrome匹配

问题
做了一个剖析数据生成图片的小工具,隔一段时间就会截图失败,因为 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("解压实现.")

后果:
兼容

不兼容

退出移动版