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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM