2021年現在、Puppeteerを使う理由はなくなった。Playwrightを使おう。
(たんなるポエムです)
個人的に、 puppeteer-ruby と playwright-ruby-client という2つのOSSを育てている。
puppeteer-rubyは Google Chromeチームによる元祖Puppeteer をまるっとRubyで再実装したライブラリで、playwright-ruby-clientは PuppeteerからフォークしてMicrosoft(のなかの元Chromeチームメンバー)が育てているPlaywright のクライアントAPIをRubyで実装したライブラリだ。
実装において、puppeteerやplaywrightのソースコードをそれなりに読んでいる。
Playwrightの唯一の欠点(= Puppeteerの存在意義)がなくなった
個人ブログでこの記事を書いたときには、Playwrightは自身が起動したブラウザしか自動操作できないという大きな欠点を挙げていた。しかし、その数週間後、Playwright 1.9.0で browserType.connectOverCDP
というAPIが追加されて、こいつがまさに puppeteer.connect
相当のことをやってくれるようになった。
つまり、「Seleniumの補強として使う」ということが、PuppeteerのみならずPlaywrightでもできてしまうようになった。
Playwright 1.11.0でまた微妙にパラメータ仕様は変わるっぽいがw
Puppeteerの開発が停滞ぎみ
こんな記事を昨年末に放出したときから薄々感じていたものの、ここ半年、明らかにPuppeteerの開発は元気がない。バージョン番号は順調に上がっている反面、機能的にはほとんど何も追加されていない。
もちろん、PuppeteerはPlaywrightに比べてシンプルで、Puppeteerは純粋にChromeをDevTools Protocolで自動操作するためのツールキットなので、「もうこれ以上やることがない」みたいなところはあるかもしれない。そのため、Playwrightと単純比較するのは少しかわいそうではある。
ただ、そうはいってもPuppeteerでのファイルダウンロードまわりの使い勝手は未だに悪く、 改善の余地は結構ある。
PlaywrightがSeleniumを置き換える勢いで爆速開発が進んでいるのを見ると、いまからPuppeteerに依存した何かを作ろうとするのは「ちょっとまった!」となりそうだ。
Discussion