黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』

Ver.73以降のChromeに対応するChromeDriverをローカル環境に合わせて適切に自動でインストールする方法

f:id:d_ymkw:20190425140254j:plain

Ver.73からChromeDriverのバージョニング規則が変更された件

Chrome Driver(WebDriver)のバージョニング規則が変更されて、従来のように簡単に*1ダウンロードURLを特定できなくなった。

また、ある程度幅をもって過去バージョンにも対応していた従来と異なり、Chromeとメジャーバージョンが完全一致していないと動作しなくなったため、適切なバージョンのChrome Driverをダウンロードする必要が生じた。*2

Ver.73以降に対応したChromeDriverの自動アップデート方法

というわけで、自動で環境に応じたChrome Driverを自動でダウンロード(アップデート)するコンソールアプリを作成した。

github.com

ローカル環境のChromeのバージョンを確認して、対応するChrome Driverの最新版*3を拾ってくる仕様。

実装の話

Ver.73 以降のChromeに対応する Chrome Driverの最新版の取得手順については、公式サイトにまとめられている。

sites.google.com

公式サイトの記載に従って、下記のように愚直に実装した。

  1. 利用中のChromeのバージョンを確認する
  2. https://chromedriver.storage.googleapis.com/LATEST_RELEASE_Chromeのバージョン番号 にGETアクセス
  3. 対応する最新のChromeDriverのバージョン番号が返ってくるので取得
  4. https://chromedriver.storage.googleapis.com/index.html?path=ChromeDriverのバージョン番号/ にGETアクセス
  5. ChromeDriverのzipファイルが落ちてくるので取得

上記1について、手元では、一般向けのChromeがインストールされたWindows環境でしか利用しないため、レジストリを見てChromeバージョンを確認する仕様としている。(開発版のChromeを利用する場合や、Mac, Linuxの場合は異なる実装が必要。)

WebDriverを管理(自動アップデート)するための巷のライブラリ

Chromeに限らず、WebDriverのバージョンを適切に管理するためのライブラリとして、JavaにはWebDriverManager がある。

github.com

C# だと WebDriverManager.Netがある。名前をみると、WebDriverManager のポートかと思いきや、ソースコードを見てみると、全く異なる実装がなされている。コンセプトが同じだけで特にJavaのものとは関係ない模様。

github.com

保守の手間考えると、こういった既存のライブラリに乗っかったほうが良い感かもしれない。

ソースを読んでみた感じでは、Chrome WebDriverの最新版を決め打ちでダウンロードするというやや残念な実装になっている…。(Chromeは自動アップデートがあるので基本的に問題がないことが多いと思うのだけれど、『ローカル環境のChromeが必ずしも最新版である』とは限らない状況であれば、上記手順を試すほうがよいと思われる。)

*1:公式サイトのリリースノートから最新のバージョン情報を取得し、てきとうにURLを組み立てる方法で

*2:不特定多数の環境で動作させる場合、Chromeが常に最新のものとは限らないため

*3:要するに、対応するメジャーバージョンのもので、マイナーバージョンが最も新しいもの