前置き
Puppeteerでは現在(2020/07/08)、Chrome(Chromium)に加えFirefoxでも動作させることができます。
簡単ですが上手く動作させることができましたので、それまでの知見をまとめます。
検証環境
Windows 10 Pro 1903
puppeteer @4.0.0
Firefox Nightly 80.0a1
準備
- Puppeteerのインストール(詳細省略)
- Firefox Nightlyのインストール プレリリース版ダウンロードサイト
Firefoxは通常版だとダメで、ブラウザを起動させた後に処理が止まりタイムアウトしてしまいます。
Puppeteerは3.0以上で対応しているようです。1
ソースコード(抜粋)
const browser = await puppeteer.launch(
{
product: 'firefox', // 1. 'chrome' or 'firefox'
executablePath: 'C:\\Program Files\\Firefox Nightly\\firefox.exe', // 2. Firefox(Nightly)の実行パス
userDataDir: 'C:\\work\\Profile_FirefoxNightly', // 3. ユーザープロファイルの保存ディレクトリパス
args: ['-wait-for-browser'] // 4. Firefox(Nightly)の起動を待つ
}
);
- 現在は'chrome'か'firefox'のみ指定できます。chromeはデフォルトなのでFirefoxで動作させたいときのみ必須です。launchメソッドの引数としてではなく、環境変数でも'PUPPETEER_PRODUCT'の変数名でも登録して設定することが可能のようです。
- 実行パスは絶対パスでも相対パスでも記述可能らしいです。自分でインストールしたchromeを使用する場合にもこの項目を使用します。
- ユーザープロファイルの保存ディレクトリパスを指定しないと、ブラウザの起動はできますが終了時(
await browser.close();
)にエラーが発生します。指定するディレクトリは空で良いですが、初回起動時に「既定のブラウザに設定するか」などのダイアログが出るので、本利用前に一度起動してもろもろ設定しておいた方が良いです。 -
-wait-for-browser
を指定しないと、ブラウザの起動途中で処理が進んでしまい、エラーになります。-wait-for-browser
はFirefox用のオプションのようです。
詳細はPuppeteer公式ドキュメントのpuppeteer.launch([options])
の項を参照ください。
Puppeteer API v5.0.0
メモ
一度の処理の中でawait puppeteer.launch
を複数回行う場合、product:
オプションは一度設定すると後のすべてで有効になるようです。
それに対しexecutablePath: ``userDataDir: ``args:
オプションは毎回設定することが必要です。
product:
オプションは環境変数に設定したのと同じような扱いということなのかも?
一度の処理の中でChromeとFirefoxの両方を使用したい場合は都度product:
オプションを指定すれば大丈夫なようです。
その他
Puppeteerが公式でFirefoxをサポートしたことにより、puppeteer-firefoxはdeprecatedになったようです。2
PlaywrightというChromiumとFirefoxに加えWebKitもサポートしている同様のツールがあるそうです。3
参考:Playwrightも知らないで開発してる君たちへ