お疲れ様です。すぺきよです。
SeleniumでChromeを利用する際は、バージョン番号を指定するだけでダウンロードから実行までしてくれます。
しかし、そこで私は思いました。
「ネットに繋ぐことができない環境のために、任意のバージョンのChrome for Testingをあらかじめ別環境でダウンロードするにはどうすればいいのだろう」
あまり需要がなさそうですが、気になったのでダウンロード方法について調べてみました。
この記事を読むと何がわかるか
以下のことがわかります。
- 任意のバージョンのChrome for Testingおよび、それに関するパッケージ(ChromeWebDriverやChrome Headless Shell)をダウンロードする方法がわかります。
- 任意のバージョンと任意のプラットフォーム用のパッケージをダウンロードする方法がわかります。
- 任意のバージョンと任意のプラットフォーム用のパッケージをダウンロードをサポートするツールを記事上に公開しています。これを使って簡単にパッケージをダウンロードすることが可能です。
調査時の筆者の環境
この記事を記載している時点の筆者の環境です
OS
macOS Ventura 13.5.2
Node.js
v18.17.1
selenium-webdriver
4.12.0
バージョンを指定してChrome for Testingをダウンロード
それでも、詳細なバージョンまで指定してダウンロードしたいという場合は、次のコマンドを利用しましょう。(参考元:https://developer.chrome.com/blog/chrome-for-testing/#how-can-i-get-chrome-for-testing-binaries)
ダウンロードしたChrome for Testingは、作業フォルダ内に保存されます。
先に任意のフォルダを作って、その中でコマンドを実行しましょう。
PC内にNode.jsがインストールされていることが前提ですので、インストールされていない場合はインストールしましょう。
npx @puppeteer/browsers install chrome@<version>
例えば、最新の安定版をダウンロードするのであれば、以下のコマンドを実行します。
npx @puppeteer/browsers install chrome@stable
stableのほか、beta(ベータ版)、dev(開発版)、canary(カナリア版)、latest(最新版:カナリア版)を指定することができます。
また、詳細なバージョン番号がわかっていて、そのバージョンをダウンロードしたい場合は以下のようにコマンドを使います。
今回は、現状公開されている最小番号である「113.0.5672.0」を対象とした場合を示します。
npx @puppeteer/browsers install chrome@113.0.5672.0
npxというコマンドは、npmでダウンロードできるパッケージを作業フォルダにインストールすることなく実行するためのコマンドです。
作業フォルダに配置されないだけで、実際にはダウンロードされています。
ダウンロードしたパッケージはユーザーのキャッシュディレクトリ内(例えばMacであれば「~/.npm/_npx/」以下)にダウンロードされています。
ダウンロードしたファイルは、作業フォルダ内のchromeフォルダ以下にバージョン番号別に配置されます。
バージョンを指定してChromeDriverをダウンロード
同様に、以下のコマンドでChromeDriverをダウンロードすることもできます。
npx @puppeteer/browsers install chromedriver@<version>
例えば、最新の安定版をダウンロードするためには、以下のコマンドを実行します。
npx @puppeteer/browsers install chromedriver@stable
こちらも、stableのほか、beta(ベータ版)、dev(開発版)、canary(カナリア版)、latest(最新版:カナリア版)を指定することができます。
また、詳細なバージョン番号がわかっていて、そのバージョンをダウンロードしたい場合は以下のようにコマンドを使います。
今回は、現状公開されている最小バージョンである「115.0.5763.0」を対象とした場合を示します。
npx @puppeteer/browsers install chromedriver@115.0.5763.0
バージョン「113.0.5672.0」以上、「115.0.5763.0」未満のChromeDriverはコマンドでダウンロードできません。
ChromeDriverのDownloadページに113向けと114向けのChromeDriverのダウンロードリンクが設置されていますので、ここからダウンロードすればいいということでしょう。
バージョンを指定してChrome Headless Shellをダウンロード
Chrome Headless Shellというパッケージも同様にダウンロードできます。
コマンドは以下の通りです。
npx @puppeteer/browsers install chrome-headless-shell@<version>
現状、まだ安定版がリリースされておらず、beta版しかありません。
beta版をダウンロードするには以下のコマンドを実行します。
npx @puppeteer/browsers install chrome-headless-shell@beta
将来安定版もリリースされれば、stableも利用可能になるでしょう。
ダウンロード可能なバージョン番号の一覧について
ダウンロード方法がわかっても、ダウンロード可能なバージョン番号がわからないと、ダウンロードしたくてもダウンロードできません。
ダウンロード可能なバージョン番号の一覧は、Chrome for Testing availabilityのJSON API endpointsにあります。
ここには、現時点で8つのJSONファイルへのリンクが設置されています。
この8つのJSONファイルのリンクのうち、known-good-versions.json
を参照しましょう。
このjsonファイルに記載されているバージョン番号がダウンロード可能なバージョンのようです。
別プラットフォームのChrome for Testingなどをダウンロード
上記のコマンドや、パッと思いつく戦略でダウンロードできるのは、コマンドを実行した環境向けのCrome for TestingやChromeDriverだけです。
他の環境向けのCrome for TestingやChromeDriverをダウンロードするためには、Chrome for Testing availabilityのJSON API endpointsのknown-good-versions-with-downloads.jsonを読み解く必要があります。
ですが、ファイルも大きいし、探すのは大変です。
ということで、以下のようなダウンロードツールを夜鍋して作ってみました。
開始ボタンをクリックすると、known-good-versions-with-downloads.jsonから情報を取得し、バージョン一覧を生成します。
バージョンを選択するとパッケージとプラットフォームが選択可能になります。
パッケージとプラットフォームを選択すると、ダウンロード可能なURLを表示します。同時にダウンロードボタンを表示して、ボタンクリックでそのままダウンロードできるようになっています。
参考文献
- Chrome for Testing: reliable downloads for browser automation(https://developer.chrome.com/blog/chrome-for-testing/)
- https://github.com/GoogleChromeLabs/chrome-for-testing
- ChromeDriver – WebDriver for Chrome – Downloads(https://chromedriver.chromium.org/downloads)
- Chrome for Testing availability(https://googlechromelabs.github.io/chrome-for-testing/)
- Node.js API for Chrome(https://github.com/puppeteer/puppeteer)