ChromeとChromeDriverの互換性
Seleniumでブラウザ(Chrome)の自動操作をしようとすると、ChromeDriverを入れるかと思います。ChromeDriverとはブラウザをプログラムで制御するためのライブラリの様なものです。(と認識しています)
ただしご存じの通りChromeの公式アップデートは頻繁に起こります。するとChromeDriverがChromeブラウザの更新に追いつかず、せっかくスクレイピングするプログラムを作成してもエラーを吐く場合があります。
前回こちらでPythonからSeleniumを行うプログラムを作成しましたが、気がついたらChromeとChromeDriverの互換性に問題が生じてしまいエラーを吐いていました。
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 92
Current browser version is 94.0.4606.61 with binary path /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
今回はそんな時の対応方法をまとめました。
Chromeで何とか出来るか
結論から言うとChromeでも出来るのですがあまりおすすめしません。 その方法が自動更新を解除するものだからです。Chromeに標準で設定されている自動更新を解除した上でChromeDriverが対応していた古いバージョンのChromeをダウンロードしてきて再インストールをすれば動作するはずです。
しかしこの方法はメインのブラウザのバージョンを古く保つことになるためセキュリティ上よろしくありません。昨今ブラウジングほど頻繁にすることもないのに。
そうだChromiumを入れよう
バージョン固定可能なスクレイピング用のブラウザを新しくダウンロードしてしまえば、既存のChromeブラウザを汚すことはありません。ChromeDriverを使うにはChromeの他にChromiumといううってつけのブラウザがあります。
Chromiumはオープンソースで開発者フレンドリーなChromeにとても良く似たブラウザです。Chromiumは設定を変更しなければ自動更新されることもありません。また大概のコードもほとんどそのまま使えます。(一部変更しますが後ほど説明します)
まずはエラーコードを確認して互換性のあるChromeと同じバージョンのChromiumをインストールシて下さい。
前回のコードを変更
前回のコードを参考にしています。driver
を初期化する際に第二引数にoptions
を渡しています。オプションではブラウザを明示的にChromiumと宣言しています。
from selenium.webdriver.chrome.options import Options
options = Options()
options.binary_location = "/Applications/Chromium.app/Contents/MacOS/Chromium"
driver = webdriver.Chrome("/usr/local/bin/chromedriver", options=options)
これで既存のプログラムは動作するはずですし、今後Chromiumの更新さえしなければエラーを吐くことも無いかと思います。多分。