【Ruby/Selenium】v115からChromeDriverの配布元が変わったようなので対応した話

2023年7月29日Mac,Ruby

こんにちは、しきゆらです。
数年ごとに時たま書いているSeleniumネタ、 今回は久々に大きく動かなくなったので調べつつ対応した記録を残しておきます。

追記: 2023/08/16

確認したところwebdriversに更新が入っており、v5.3.1から対応されているようです。
webdriversを利用している方は、Gemの更新をしてみてください。

webdriversが動かなくなった

これまではwebdriversというgemを使い、インストールされているChromeのバージョンにあったChromeDriver良しなに取得するようにしていました。

さっくりwebdriversの中身を見てみましたが、インストールしているChromeのバージョンを確認し、必要なDriverがなければ以下のサイトから該当バージョンのものを取得・配置するようです。

https://chromedriver.storage.googleapis.com/LATEST_RELEASE_114」のようにChromeのバージョン値を指定するとその最新版となるChromeDriverのバージョンを取得できるので、これをもとに取得する感じでした。

ところが、先日Seleniumを動かしたらChromeDriverがない、とエラーが出て動かなくなっていました。 何事かと思って調べてみました。


ChromeDriverの配布元が変わった

ChromeDriverのサイトを見てみると、配布場所が変更されたようです。

Latest ChromeDriver Binaries

ということでwebdriversが参照していたサイトとは別のところで配布するようになったようです。

ついでに調べていると、Chrome for Testingなるものが出てきました。

以前も何かのタイミングでちらっと見た気がするんですが、あまり詳しく見てはいなかったので今回読んでみました。

どうやら、Chromeは自動更新なので開発者はテストをするタイミングによって意図しないバージョンになっていたりしてつらい、そうだテスト用に自動更新がないChromeを作ろう、ということのようです。

ということでテスト用Chromeとそのバージョン向けのChromeDriverが以下のサイトで一緒に配布されるようになっていました。

自前でChromeDriverを取得するスクリプトを組んでいる場合は、この辺の対応が必要になりそう。

対応方法 (一部追記あり)

こちら、webdriversのGemにあったPRは2023/08/01にマージされていました。
v5.3.1から対応が入っているようです。

暫定対応

webdriversでも対応するPRが上がってますが、記載時点(2023/07/29)ではまだマージされてません

こちらのissueで対応方法が記載されていました。

現在はv114向けのChromeDriverでも動くようなので、コード内でChromeDriverのバージョンを決め打ちすることでその場しのぎをすることができます。 ただ、これもこのバージョンで動作しなくなるのは時間の問題なのでいつまで使えるかは不明です。

Webdrivers::Chromedriver.required_version = "114.0.5735.90"

Selenium Manager

issueを見ていくと、Selenium Managerなるものが出てきました。

まだBetaのようですが、Selenium自体に含まれる各WebDriverの取得などをしてくれるツールのようです。

これまでは、手動で配布サイトから取得したり上記webdriversのような別ツールでWebDriverを取得して使う必要がありましたが、Selenium Managerを使えば外部ツールを使わずにSeleniumだけで完結するようになりますね。

使い方も、以下の3点を満たしていれば勝手に動いてくれるようです。

  • ServiceクラスでWebDriverのパスを指定していない
  • webdriversのような外部のWebDriver管理ツールを使っていない
  • 環境変数PATHの中にWebDriverがない

ということで、webdriversが動かないのでこっちを使ってみることにしました。

ここでは、タイトルの通りRuby環境である前提で記載しますが selenium-webdriverのgemを最新にしたうえで、上記3点を満たすように環境を整えるだけで勝手に使えるようになります。

なお、selenium-webdriverのCHANGELOGを見てみると、4.6.0のころからSelenium Managerへ対応が入っているようです。
手元の環境では、webdriversのみしか使っていないのでこれを削除するだけで利用できました。

webdriversがない状態でSeleniumを使ってブラウザを立ち上げようとするとターミナル上に以下のように記載されてChromeが立ち上がるようになりました。

2023-07-29 20:53:08 WARN Selenium applicable driver not found; attempting to install with Selenium Manager

Selenium Managerが良しなに動いてくれているようです。

これで、対応はおしまいです。

まとめ

今回はSeleniumを使っていたらChromeDriverを取得できずに死んでしまったので、原因を調べつつ対応してみました。

結果としては、外部ツールに頼ることなくSeleniumが提供してくれているSelenium Managerを使うことで無事動くようになりました。

今回は、ここまで。

おわり

Posted by しきゆら