1. 程式人生 > 其它 >Python:自動更新Chrome WebDriver

Python:自動更新Chrome WebDriver

一段時間沒有使用Chrome webdriver後,由於Chrome瀏覽器升級導致原有的chromedriver已經過期,所以決定寫個小程式來實現自動去更新Chrome webdriver,這樣就無後顧之憂了。

思路:

  1. 獲取Chrome瀏覽器的版本資訊
  2. 獲取Chrome webdriver的版本資訊
  3. 對比Chrome瀏覽器版本資訊和webdriver版本資訊是否一樣
    1. 如果一樣則無需更新
    2. 不一樣則去網上下載對應的webdriver放到python安裝路徑下

由於google網址無法訪問,這邊使用的是淘寶提供的映象網址:

程式碼如下:

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()