Ver.73からChromeDriverのバージョニング規則が変更された件
Chrome Driver(WebDriver)のバージョニング規則が変更されて、従来のように簡単に*1ダウンロードURLを特定できなくなった。
また、ある程度幅をもって過去バージョンにも対応していた従来と異なり、Chromeとメジャーバージョンが完全一致していないと動作しなくなったため、適切なバージョンのChrome Driverをダウンロードする必要が生じた。*2
Ver.73以降に対応したChromeDriverの自動アップデート方法
というわけで、自動で環境に応じたChrome Driverを自動でダウンロード(アップデート)するコンソールアプリを作成した。
ローカル環境のChromeのバージョンを確認して、対応するChrome Driverの最新版*3を拾ってくる仕様。
実装の話
Ver.73 以降のChromeに対応する Chrome Driverの最新版の取得手順については、公式サイトにまとめられている。
公式サイトの記載に従って、下記のように愚直に実装した。
- 利用中のChromeのバージョンを確認する
- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_Chromeのバージョン番号 にGETアクセス
- 対応する最新のChromeDriverのバージョン番号が返ってくるので取得
- https://chromedriver.storage.googleapis.com/index.html?path=ChromeDriverのバージョン番号/ にGETアクセス
- ChromeDriverのzipファイルが落ちてくるので取得
上記1について、手元では、一般向けのChromeがインストールされたWindows環境でしか利用しないため、レジストリを見てChromeバージョンを確認する仕様としている。(開発版のChromeを利用する場合や、Mac, Linuxの場合は異なる実装が必要。)
WebDriverを管理(自動アップデート)するための巷のライブラリ
Chromeに限らず、WebDriverのバージョンを適切に管理するためのライブラリとして、JavaにはWebDriverManager がある。
C# だと WebDriverManager.Netがある。名前をみると、WebDriverManager のポートかと思いきや、ソースコードを見てみると、全く異なる実装がなされている。コンセプトが同じだけで特にJavaのものとは関係ない模様。
保守の手間考えると、こういった既存のライブラリに乗っかったほうが良い感かもしれない。
ソースを読んでみた感じでは、Chrome WebDriverの最新版を決め打ちでダウンロードするというやや残念な実装になっている…。(Chromeは自動アップデートがあるので基本的に問題がないことが多いと思うのだけれど、『ローカル環境のChromeが必ずしも最新版である』とは限らない状況であれば、上記手順を試すほうがよいと思われる。)