はじめに
Puppeteerのメジャーバーションが2020/01/28に2.1にアップデートされました。すでに二ヶ月が経過し、Playwrightという新たなライブラリも登場しましたが、この記事では主な変更点について書いています。
Puppeteerとは
Node.jsでHeadless Chromeを操作するライブラリです。Chrome DevTools(開発者ツール)を使って操作しています。
GoogleChromeチームが作成・公開しています。
リリースノート
変更点はここに書いてあるので、公式を読む場合はこちらから
https://github.com/puppeteer/puppeteer/releases/tag/v2.1.0
変更点
公式のFirefoxがサポートされました。(ただしまだ実験的な機能)
実はv2.1より前から、PuppeteerでFirefoxを操作する機能は実験的に組み込まれており、Puppeteerのソースコードの中で puppeteer-firefox
というライブラリが存在していました。そしてこれは、npmパッケージとしても公開されています。
https://www.npmjs.com/package/puppeteer-firefox
※現在はdeprecatedになっています。
PuppeteerはChrome DevTools Protocol(CDP)を使って、Chromeを操作しています。FirefoxにはCDPは存在しないのにどうやって操作しているかというと、Puppeteerの開発チームによって Juggler
という、Firefoxのリモートデバッグツールを開発しサポートして再現していました。
https://github.com/puppeteer/juggler
※現在はdeprecatedになっています。
これは、Firefoxにカスタムパッチを当てて実現していました。つまり、Mozilla公式から提供されているFirefoxではありませんでした。
Puppeteer v2.1では、このJugglerは使われていません。Puppeteerの開発チームとMozillaが協議した結果、Firefoxにカスタムパッチを当てて開発を継続することは困難であると判断され、Mozillaと stock
をサポートしてもらいMozillaと協力して開発を行っています。
※stockは公開されていないみたいです。調べても出てこなかった。
Puppeteer開発チームは、Safariのような別のブラウザベンダが開発しているブラウザにPuppeteerをサポートするために協力、クロスブラウザコマンドを実行するための調査を続けていくようです。
といった内容が、READMEのこの部分に追加されています。
https://github.com/puppeteer/puppeteer#q-what-is-the-status-of-cross-browser-support
あと、Chroniumのバージョンが80になりました
まとめ
Playwrightも複数のブラウザに対応していますが、Puppeteerも今後対応を続けていく予定で、かつブラウザベンダが提供しているブラウザで動作するよう(WebkitではなくSafariといった)活動を続けていくようです。Playwrightとの棲み分けが進んでいくかもしれないです。
どちらが生き残るかではなく、どちらにも注目して使っていくことになるんじゃないかと予想しています。