しかし、バージョン差異によるエラーが発生するたびに毎回ChromeDriverのアップデート作業が発生するのは面倒です。
そこで、自動的にChromeDriverのバージョンをブラウザのバージョンと一致させる webdriver_manager ライブラリを利用して、Pythonファイルが実行されるたびにバージョン差異をチェック、バージョンが異なる場合には自動的にバージョンが合う形でインストールされるようにしました。
以下、webdriver_managerのインストールおよび実行時に発生したエラーの解消方法とあわせてご紹介していきます。
目次:

webdriver_managerライブラリで実行時にChromeバージョン一致
webdriver_managerの動きとしては、プログラム実行時に現在のGoogle Chromeのバージョンを確認し、自動で適切なChrome Driverを当てたうえで実行するようになるようです。
なお、webdriver_managerはChromeのみならず、下記のさまざまなブラウザに対応しています。
For now support:ChromeDriver EdgeChromiumDriver GeckoDriver IEDriver OperaDriver
他にもwebdrivermanagerやwebdriver-managerなど類似のライブラリがあるようなのですが、webdriver_managerがライブラリの充実さからよく使われていそう。
以下、インストールおよび実行時に発生したエラーと解消方法についてご紹介。
実行環境における権限エラー: pip install —user
venvによる仮想環境で $ pip install webdriver-manager を実行しようとしたところ、下記権限エラーが発生。
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/idna-3.3.dist-info'
Consider using the --user
option or check the permissions.
指示されたとおり、下記のように—user オプションをつけて実行すると無事にインストールできましたが、後に下記エラーが発生。
$ pip install web-driver --user
ModuleNotFoundError: No module named 'webdriver_manager’ のエラーが発生
Selenium4の記述をしたコード(後述)を実行したところ、“webdriver_managerのモジュールが見つかりません”というエラーが発生しました。
そこで、pipでweb-driverをインストールするのではなく、pip3でwebdriver_managerとしてインストールしなおします。
$ pip3 install webdriver_manager
インストールされているSeleniumのバージョンをコマンドラインで調べる
つづいて、Seleniumのコーディング方法について。
GitHub上のRead.meには、Selenium 3 と Selenium 4のバージョンによって異なる記述方法が示されています。
インストールされているSeleniumのバージョンを調べるには、たとえばPython対話シェルで下記のように実行します。
$ python
>>> import selenium
>>> help (selenium)
...
VERSION
4.1.3
...
Selenium 4向けのコードを追加して実行
公式を参考に、下記コードを追加します。
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
これで無事に実行時にChromeDriverのバージョンをチェックし、バージョンに差異がある場合には自動て最新版をインストールしてくれるようになりました!
実行すると、実行時にターミナルに下記のように出力されます。
[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 114.0.5735
[WDM] - Get LATEST chromedriver version for 114.0.5735 google-chrome
[WDM] - About to download new driver from https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_mac64.zip
[WDM] - Driver has been saved in cache [/Users/username/.wdm/drivers/chromedriver/mac64/114.0.5735.90]
上記のように出力されれば、webdriver_managerが正常に動作しています!
別途、手動でChromeDriverをアップデートする方法は
Chrome限定のシンプルなバージョン一致ライブラリ: chromedriver-autoinstaller
webdriver_managerとは異なり適用可能なブラウザはChromeのみとなりますが、同様のことをしてくれるライブラリとして、”chromedriver-autoinstaller” というものがあるようです。
こちらも適切なバージョンのchromedriverが存在するか確認し、存在しない場合は適切なバージョンのものをインストールしてくれるとのこと。
※ 私のケースではうまく動作してくれませんでした…!以下、導入方法を残しておきます。
■ インストール
pip3 install chromedriver-autoinstaller
下記のように1行追加すると、バージョンが合わない場合に適切なバージョンをインストールしてくれます。
from selenium import webdriver
import chromedriver_autoinstaller
# Check if the current version of chromedriver exists and download it if not found.
chromedriver_autoinstaller.install()
あとは通常どおり、driverを起動させたりしてSeleniumによるスクレイピングを実施すればOKです。
webdriver_managerはドライバ生成時にオプションとして指定する必要がありますが、chromedriver_autoinstallerはドライバを生成する前にシンプルにinstallメソッドを実行すれば良いだけです。
コードを書く際の書き方としては、chromedriver-autoinstallerの方がシンプルで書きやすいかもしれません。
この記事の気になった箇所を読み返す:
category: