Selenium:ChromeDriverをアップデートしてブラウザバージョンを合わせる

最新の更新日
May 14, 2022 6:29 AM
Target Keywords
vol.

Pythonファイルからのスクレイピング時、Seleniumが利用するChromeDriverと、Chromeアプリケーションとのバージョンが異なり「セッションを作成できない」とのエラー表示が出ました。ChromeDriver側のアップデートを行い、アップデートしたChromeDriverへとバージョンを切り替えることでエラーが解決。方法を記載します。

なお、自動的にChromeDriverのバージョンをブラウザのものと合わせてくれるライブラリがあるようです。本文中”ChromeDriverManagerで自動的にバージョンを一致させる”の箇所をご参照ください。

image

Seleniumが利用するChromeDriverと、Chromeアプリケーションとのバージョンが異なりセッションを作成できないエラー

ローカルでSeleniumを利用したPythonファイルを実行しようとしたところ、下記エラーが発生。

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 99 Current browser version is 101.0.4951.54 with binary path /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

Seleniumが利用するChromedriverがサポートしているバージョンが99のみで、現在の実Chromeのバージョンが101。

現行のChrome安定版では最新版でした。

ChromedriverとChromeとでバージョンの互換性が合わず、Seleniumがセッションを作成できないというエラーのようです。

Chromeブラウザに合ったChromeDriverをインストール

ChromeDriverと、インストールされているChromeとのバージョンを合わせます。

私の場合はエラーメッセージのとおり、ChromeDriver側のサポートバージョンが古かったので、ChromeDriverのほうをアップデートします。

私のインストール済Chromeのバージョンは101で最新版でしたので、最新版のChromeDriverをインストールすれば良さそう。

ChromeDriverには -pyや -binaryなどがありますが、Sleleniumなどのテスト自動化ツールから利用したい場合にはchromedriver-binaryのものを利用する必要があるようです。

chromedriver-binary · PyPI にしたがって、下記コマンドで「最新版の」chromedriver-binaryをpipでインストール。

$ pip install chromedriver-binary

下記メッセージが表示されれば成功。

仮想環境などで実行している場合には、再度activateさせる必要があります。

Downloading chromedriver-binary-102.0.5005.27.0.tar.gz (4.9 kB)
  Preparing metadata (setup.py) ... done
Using legacy 'setup.py install' for chromedriver-binary, since package 'wheel' is not installed.
Installing collected packages: chromedriver-binary
  Running setup.py install for chromedriver-binary ... done
Successfully installed chromedriver-binary-102.0.5005.27.0

ただし、上記メッセージ内にもあるとおり、「wheelパッケージが未インストールのため、古いバージョンのsetup.pyを利用しています。とあります。

wheelパッケージをインストールして、その後色々と試してみたのですが、結局古いバージョンへの指定が変えられず。

そこで下記の方法で、インストールしたchromedriver-binaryを明示的にファイルにインポートします。

実行pythonファイル内でchromedriver_binaryをインポート

下記の例のように、seleniumからwebdriverをインポートした後にchromedriver_binaryをインポートします。

import chromedriver_binary の一文を追加。

この記述によって、chromedeiver binaryへのパスが設定されるとのこと。

from selenium import webdriver
import chromedriver_binary  # Adds chromedriver binary to path

driver = webdriver.Chrome()
driver.get("http://www.python.org")
assert "Python" in driver.title
任意のpythonファイル

これで問題なく、インストールしたchromedriver-binaryのバージョンのものでSeleniumが実行されるようになりました。

chromedriver-binary-autoでパス指定も含めてインストール実行してくれる?

下記の記事内と掲載されているツイートで、パス指定も含めてインストール実行してくれるとの記述がありましたが、私の場合はパス指定が自動化されることはありませんでした。

pip install時に「pip install chromedriver-binary-auto」とするだけでこれらのエラーをパス指定無しで解決できるとのこと。

公式Docsによると、-autoの意味は、”Automatically detected versions” とのことです。「利用しているChromeブラウザと整合するバージョンのChromeDriverを自動検知してインストールする」ということで、パス指定が自動化されるわけではないと思われます。

既出の $ pip install chromedriver-binary では最新版がインストールされてしまうので、Chromeアプリのバージョンが最新版でない場合などに有用。

「解決した!」と言っている方々は単純にブラウザChromeバージョンが最新版でなかっただけなのでは…?

公式に「パスを環境変数にエクスポートする方法」が挙げられていたので、こちらの方がまだ可能性がありそうです。(自分はこちらでも上手く通らず)

Exporting chromedriver binary path This package installs a small shell script chromedriver-path to easily set and export the PATH variable: $ export PATH=$PATH:chromedriver-path

ChromeDriverManagerで自動的にバージョンを一致させる

なんと自動的にバージョンを揃えてくれる、ChromeDriverManager(webdriver_manager)というライブラリがあるとのこと…!

具体的には、プログラム実行時に現在のGoogle Chromeのバージョンを確認し、自動で適切なChrome Driverを当てたうえで実行するようになるよう。

他にもwebdrivermanagerやwebdriver-managerなど類似のライブラリがあるようなのですが、webdriver_managerがライブラリの充実さからよく使われていそうです。

(参考) 手動でChromeDriverバージョンを指定してインストールする場合

以下はchromedriver-binaryではなく、chromedriver-pyの場合です。ご注意ください。

image

ChromeDriverのリストは下記のChromeDriver公式ページから。

pipコマンドを利用してアップデート・アップグレードさせることができます。

ただし試したのはchromedriver-pyの方のみ。chromedriver-binaryでも同様にインストールできるかは未検証。

== で指定するバージョンは各自がインストールしているChromeブラウザのバージョンにより異なるので、Chrome > Help > About Google Chrome から確認してください。

$ pip install chromedriver-py==101.0.4951.41

下記メッセージが表示されればインストールは成功です。

Downloading chromedriver_py-101.0.4951.41-py3-none-any.whl (28.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 28.4/28.4 MB 53.5 MB/s eta 0:00:00
Installing collected packages: chromedriver-py
Successfully installed chromedriver-py-101.0.4951.41