#問題
- PythonでChrome webdriverを使っていると、Chrome本体とのバージョンの不整合で、頻繁にアップデートが必要になる。
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 90
Current browser version is 94.0.4606.71 with binary path /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
- 面倒くさいので自動化したい。
#解決方法
- モジュール
webdriver-manager
を用いることで自動化できる。
##インストール
$ pip install webdriver-manager
#コードの改変
- 元のコードの例
import chromedriver_binary
from selenium.webdriver import Chrome
driver = Chrome()
- 改変後のコードの例
# import chromedriver_binary
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver import Chrome
# driver = Chrome()
driver = Chrome(ChromeDriverManager().install())
- 実行すると、Chromeのバージョンに合ったドライバをインストールしてくれる
====== WebDriver manager ======
Current google-chrome version is 94.0.4606
Get LATEST driver version for 94.0.4606
There is no [mac64] chromedriver for browser 94.0.4606 in cache
Get LATEST driver version for 94.0.4606
Trying to download new driver from https://chromedriver.storage.googleapis.com/94.0.4606.61/chromedriver_mac64.zip
Driver has been saved in cache [/Volumes/Home/ynaito/.wdm/drivers/chromedriver/mac64/94.0.4606.61]
2022.10.17時点での問題点と姑息的対応
- Google が Chromeドライバの名称を
chromedriver_mac64_m1.zip
からchromedriver_mac_arm64.zip
に変更したために、以下のようなエラーを吐く。
ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/106.0.5249.61/chromedriver_mac64_m1.zip
- 緊急避難的な対応として、
.../site-packages/webdriver_manager/core/download_manager.py
の末尾から2行目(執筆時点で28行目)の
response = self._http_client.get(url)
を
response = self._http_client.get(url.replace('chromedriver_mac64_m1', 'chromedriver_mac_arm64'))
に書きかえて対応している。(webdriver_managerが対応するまでの弥縫策)