Python:自动更新Chrome WebDriver
一段时间没有使用Chrome webdriver后,由于Chrome浏览器升级导致原有的chromedriver已经过期,所以决定写个小程序来实现自动去更新Chrome webdriver,这样就无后顾之忧了。
思路:
- 获取Chrome浏览器的版本信息
- 获取Chrome webdriver的版本信息
- 对比Chrome浏览器版本信息和webdriver版本信息是否一样
- 如果一样则无需更新
- 不一样则去网上下载对应的webdriver放到python安装路径下
由于google网址无法访问,这边使用的是淘宝提供的镜像网址:http://npm.taobao.org/mirrors/chromedriver/
代码如下:
import os import re import sys import winreg import zipfile from pathlib import Path import requests python_root = Path(sys.executable).parent # python安装目录 base_url = 'http://npm.taobao.org/mirrors/chromedriver/' # chromedriver在国内的镜像网站 version_re = re.compile(r'^[1-9]\d*\.\d*.\d*') # 匹配前3位版本信息 def get_chrome_version(): """通过注册表查询Chrome版本信息: HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\BLBeacon: version""" try: key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'SOFTWARE\Google\Chrome\BLBeacon') value = winreg.QueryValueEx(key, 'version')[0] return version_re.findall(value)[0] except WindowsError as e: return '0.0.0' # 没有安装Chrome浏览器 def get_chrome_driver_version(): try: result = os.popen('chromedriver --version').read() version = result.split(' ')[1] return '.'.join(version.split('.')[:-1]) except Exception as e: return '0.0.0' # 没有安装ChromeDriver def get_latest_chrome_driver(chrome_version): url = f'{base_url}LATEST_RELEASE_{chrome_version}' latest_version = requests.get(url).text download_url = f'{base_url}{latest_version}/chromedriver_win32.zip' # 下载chromedriver zip文件 response = requests.get(download_url) local_file = python_root / 'chromedriver.zip' with open(local_file, 'wb') as zip_file: zip_file.write(response.content) # 解压缩zip文件到python安装目录 f = zipfile.ZipFile(local_file, 'r') for file in f.namelist(): f.extract(file, python_root) f.close() local_file.unlink() # 解压缩完成后删除zip文件 def check_chrome_driver_update(): chrome_version = get_chrome_version() driver_version = get_chrome_driver_version() if chrome_version == driver_version: print('No need to update') else: try: get_latest_chrome_driver(chrome_version) except Exception as e: print(f'Fail to update: {e}') if __name__ == '__main__': check_chrome_driver_update()