はじめに
「selenium webdriver 自動」や「webdriver 更新 自動」などで検索しても
webdriver-managerを使った方法の紹介の方が多く感じたので書くことにしました。
環境
Windows11
python 3.10.4
requests 2.28.1
実際のコード
pip install requests
import os
import urllib.request
import requests
def main():
# chromium公式の発表しているchrome_driverの最新バージョン名を取得
CHROME_LATEST_VERSION = requests.get("http://omahaproxy.appspot.com/linux?channel=stable").text
# 上記のバージョン名からメジャーバージョン名を取得。
CHROME_LATEST_MAJOR_VERSION = CHROME_LATEST_VERSION.split(".")[0]
# chrome_driverのapiからメジャーバージョンの最新driverのバージョン名を取得
CHROME_DRIVER_VERSION = requests.get(f"https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{CHROME_LATEST_MAJOR_VERSION}").text
# windows用chrome_driverのurlとzipファイル名の設定
CHROME_DRIVER_WINDOWS_ZIP = "chromedriver_win32.zip"
CHROME_DRIVER_WINDOWS = f"http://chromedriver.storage.googleapis.com/{CHROME_DRIVER_VERSION}/{CHROME_DRIVER_WINDOWS_ZIP}"
# webdriver保存用のディレクトリの作成
save_dir = f"./webdrivers/{CHROME_DRIVER_VERSION}"
os.makedirs(save_dir, exist_ok=True)
# zipのダウンロード
file_name = f"{save_dir}/{CHROME_DRIVER_WINDOWS_ZIP}"
urllib.request.urlretrieve(url=CHROME_DRIVER_WINDOWS, filename=file_name)
if __name__=="__main__":
main()
コードの詳細
# chromeの最新バージョン名を取得
CHROME_LATEST_VERSION = requests.get("http://omahaproxy.appspot.com/linux?channel=stable").text
# 上記のバージョン名からメジャーバージョン名を取得。
CHROME_LATEST_MAJOR_VERSION = CHROME_LATEST_VERSION.split(".")[0]
# chrome_driverのapiからメジャーバージョンの最新driverのバージョン名を取得
CHROME_DRIVER_VERSION = requests.get(f"https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{CHROME_LATEST_MAJOR_VERSION}").text
Chrome、ChromeWebDriverそれぞれのメジャーバージョンの違いによって発生するエラーを防ぐため、
Chromeの最新安定バージョンとChromeWebDriverの最新安定バージョンを取得。
詳細は以下の参考記事↓
https://dev.classmethod.jp/articles/getting-chrome-driver-version-fitted-chrome-latest-stable-version/
# windows用chrome_driverのurlとzipファイル名の設定
CHROME_DRIVER_WINDOWS_ZIP = "chromedriver_win32.zip"
CHROME_DRIVER_WINDOWS = f"http://chromedriver.storage.googleapis.com/{CHROME_DRIVER_VERSION}/{CHROME_DRIVER_WINDOWS_ZIP}"
windows用ChromeWebDriverの名称とAPIエンドポイントのURLの設定。
# zipファイルのダウンロード
file_name = f"{save_dir}/{CHROME_DRIVER_WINDOWS_ZIP}"
urllib.request.urlretrieve(url=CHROME_DRIVER_WINDOWS, filename=file_name)
urllib.request.urlretrieveで直接zipファイルをダウンロードしている
参考
他にも記事ありました。
http://holiday-programmer.net/webdriver_auto_update/
おわりに
最初はwebdriver-managerをおとなしく使っていましたが、ソース内にエンドポイントのURLがあることを見つけ、
自分で作ってみることにしました。
このコードでは他OSへの対応やZipの処理もなく、実際に使えるレベルではないので
今回のコードをもとに拡張していきたいと思います。