🍉

2021年現在、Puppeteerを使う理由はなくなった。Playwrightを使おう。

2021/04/19に公開

(たんなるポエムです)

個人的に、 puppeteer-rubyplaywright-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 相当のことをやってくれるようになった。

https://github.com/microsoft/playwright/releases/tag/v1.9.0

つまり、「Seleniumの補強として使う」ということが、PuppeteerのみならずPlaywrightでもできてしまうようになった。

Playwright 1.11.0でまた微妙にパラメータ仕様は変わるっぽいがw
https://github.com/microsoft/playwright/commit/63d0d466e346695944f96e9a6e0954fc28b717b8

Puppeteerの開発が停滞ぎみ

https://qiita.com/YusukeIwaki/items/a9dbd48b1ed4313f3815

https://qiita.com/YusukeIwaki/items/f559c11d08df1a2df465

こんな記事を昨年末に放出したときから薄々感じていたものの、ここ半年、明らかにPuppeteerの開発は元気がない。バージョン番号は順調に上がっている反面、機能的にはほとんど何も追加されていない。

https://github.com/puppeteer/puppeteer/releases

もちろん、PuppeteerはPlaywrightに比べてシンプルで、Puppeteerは純粋にChromeをDevTools Protocolで自動操作するためのツールキットなので、「もうこれ以上やることがない」みたいなところはあるかもしれない。そのため、Playwrightと単純比較するのは少しかわいそうではある。

ただ、そうはいってもPuppeteerでのファイルダウンロードまわりの使い勝手は未だに悪く、 改善の余地は結構ある。

PlaywrightがSeleniumを置き換える勢いで爆速開発が進んでいるのを見ると、いまからPuppeteerに依存した何かを作ろうとするのは「ちょっとまった!」となりそうだ。

Discussion