JavaScriptを使用している動的なウェブサイトをスクレイピングしたい場合、一般的に推奨されるのは、ブラウザ自動化ツールを使用することです。この種のツールでは、コードを使ってブラウザを操作し、そのブラウザに表示される情報をスクレイピングできます。
Puppeteer、Selenium、Playwrightなどさまざまなブラウザ自動化ツールがあります。この記事では、PlaywrightとSeleniumに焦点を当て、それらが提供する機能、柔軟性とパフォーマンス、コミュニティのサポート、ブラウザのサポート、セットアップ、使いやすさに基づいてツールをレビューします。
セットアップと使いやすさ
PlaywrightとSeleniumはどちらも、バインディング(すべてが同じAPIを使用する言語固有の実装)を通じて、Java、Python、JavaScriptなどのいくつかのプログラミング言語をサポートします。PlaywrightまたはSeleniumを使い始めるには、その言語のバインディングライブラリをダウンロードする必要があります。
例えば、Pythonを使っている場合はpytest-playwright
ライブラリを、Selenium
を使っている場合はseleniumライブラリをダウンロードおよびインストールする必要があります。
ただし、Seleniumをインストールする場合、使用するブラウザ用のWebDriverをダウンロードする、というステップを1つ追加する必要があります。例えば、Chromeでスクレイピングを行う場合、ChromeDriverをダウンロードする必要があります。対照的に、Playwrightには1つのドライバがあり、playwright install
コマンドを実行することで、サポートされているすべてのブラウザに必要なバイナリがダウンロードされます。
一度すべてをセットアップすれば、どちらのライブラリも非常によく似た動作をするので、ウェブスクレイピングの経験があれば簡単に操作できるはずです。ただし初心者向けに、Playwrightはより簡潔なAPIと強力なデバッグ機能を提供しており、最初の数個のスクリプトを問題なく作成するのに役立ちます。さらに、Playwrightのドキュメントはより現代的で、初心者向きです。
まとめると、SeleniumとPlaywrightはどちらも簡単に使い始めることができますが、Playwrightはエクスペリエンスがよりシームレスで、不必要な混乱を招きにくいと言えます。
特徴
PlaywrightとSeleniumはどちらも、必要な基本的要素の位置特定機能をすべて提供しています。CSSまたはXPathセレクタを使って要素を見つけることができます。
# Playwright
heading = page.locator('h1')
accept_button = page.locator('//button[text()="Accept"]')
# Selenium
heading = driver.find_element(By.CSS_SELECTOR, 'h1')
accept_button = driver.find_element(By.XPATH, '//button[text()="Accept"]')
Playwrightには、テキスト、プレースホルダ、タイトル、ロールなどのプロパティをクエリできる追加ロケータがあります。これらにより、開発者はより明確なロケータ関数を書くことができるため、セレクタを使用してこれらのロケータを実現する方法をまだ知らない初心者にとって役立ちます。
accept_button = page.get_by_text("Accept")
ウェブアプリケーションをスクレイピングする場合、アクションのタイミングを正しく把握することが重要です。まだ表示されていない要素に対してアクションを実行しないようにし、かつ要素の読み込みを長時間待機しないようにする必要があります。
これを実現するために、Seleniumは明示的なwaitステートメントを使用します。例えば、要素がページに読み込まれるのを待機するようにスクリプトに指示できます。
el = WebDriverWait(driver, timeout=3).until(lambda x: x.find_element(By.TAG_NAME,"button"))
el.click()
それに比べると、Playwrightの待機はもう少しシンプルです。要素に対してアクションを実行する前に、Playwrightはさまざまなアクション可能性チェックを自動的に実行します。つまり、まだ表示されていない要素に対してクリックを試みることはできないのです。
page.get_by_role("button").click()
どちらのツールも、コードのデバッグと生成のための注目すべきQOL機能をいくつか備えています。例えば、Playwright Inspectorを使えば、スクリプトをステップ実行して、どこで間違ったのかを確認できます。同じスクリプトを百万回も連続して再実行する必要はもうありません!
また、HTMLでセレクタを検索せずにスクリプトを作成したい場合、Playwrightにはコードジェネレータでスクリプトを記録するオプションがあります。このジェネレータは、ユーザーが行ったアクションを記録し、それらのアクションを実行するコードを提供します。そのため、初心者がライブラリに慣れるには最適な方法の1つです。
コードジェネレータによって作成されたコードは、セレクタの特異性のために情報のスクレイピングには役立ちませんが、専門家にとっては、アカウントへのログインや正しいページへの移動など、スクレイピング前のセットアップアクションを生成するのに便利なものです。
SeleniumにはSelenium IDEという再生・記録ツールもあり、ChromeとFirefoxのブラウザ拡張機能として利用できます。Selenium IDEは再生・記録ツールとして機能し、ブラウザ環境内でSeleniumスクリプトを直接記録することができます。このツールは、Playwright Inspectorとコードジェネレータの両方の機能を、シンプルで使いやすいパッケージにまとめたものです。
柔軟性とパフォーマンス
先に述べたように、PlaywrightとSeleniumは多くの言語でサポートされています。Playwrightは、JavaScript/TypeScript、Java、Python、C#を公式にサポートしています。また、SeleniumはJava、C#、Python、JavaScript、Ruby、Kotlinを公式にサポートしています。
公式にサポートされている言語に加え、非公式なバインディングライブラリが存在する言語もあり、それらのライブラリを使って同じ効果を得ることができます。これら中で、Seleniumはより一般的な選択肢であり、ほとんどのプログラミング言語にはSelenium用のバインディングライブラリが少なくとも1つあります。つまり、Seleniumで作業することを選択すれば、最終的には、ユーザーが選択可能な事実上すべてのプログラミング言語で、スクレイピングにSeleniumを使用できます。
ほとんどのベンチマークによると、PlaywrightはSeleniumより明らかに高速です。どちらも実際のウェブブラウザを動かすため(ただし、リソースを節約するためにGUIレンダリングは行わない)、ツールの効率化には限界があります。ただし、Playwrightの開発者は、スクリプトの実行を高速化し、並列化を容易にする最適化を多数実装しました。
現在、どちらのツールもブラウザのシークレットモードに似たコンテキストをサポートしています。これにより、1つのブラウザで複数の独立したセッションを実行できるため、スクリプトを個別に実行しながらブラウザの起動コストを節約できます。ただし、Playwrightのコンテキストの実装は、Seleniumのものよりもパフォーマンス上のメリットがあります。複数のコンテキストを並行して実行することができ、スクレイピングをさらに高速化できるからです。
コミュニティのサポート
SeleniumとPlaywrightはどちらも優れたコミュニティのサポートがあり、多くのウェブスクレイピングの専門家が使用しているため、どんなテーマでも簡単にチュートリアルを見つけることができます。
SeleniumはPlaywrightより古いため、幅広い機能を網羅するドキュメントやチュートリアルのバックログを蓄積する時間がより多くありました。どのような機能を使いたいとしても、開発チームやコミュニティにより広範囲に文書化されている可能性が高いと言えます。さらに、Seleniumの使用についてサポートが必要な場合、質問の答えを得ることのできる場所がたくさんあります。
それに対し、Playwrightは資料のコレクションを構築する時間は短かったものの、Microsoftの専任開発者がPlaywrightで働いており、チームが開発・提供する新機能を紹介し、説明することでそれを補っています。そのドキュメントは、ほぼ間違いなく、よりクリーンでモダンであり、初心者にとってより使いやすいものです。
Playwrightの使い方のヒントやチュートリアルについては、公式ブログおよびYouTubeチャンネルをご覧ください。また、Playwrightのコミュニティに参加したい場合、チームによるコミュニティDiscordチャンネルがあります。
まとめ
PlaywrightとSeleniumを比較すると、Playwrightは間違いなく、クールな新機能をたくさん備えたピカピカのツール、一方Seleniumはパフォーマンスが良く、専門家にとっては十分すぎるほど安定したツールです。ウェブスクレイピングを始めたばかりなら、初心者向けのサポートが充実しているPlaywrightの方がよいでしょう。
ウェブスクレイピングにPlaywrightまたはSeleniumのどちらを選択しても、Bright Dataのプロキシはいずれのブラウザ自動化ツールとも簡単に統合できます。Playwright プロキシ統合およびSeleniumプロキシ統合のステップガイドに従ってください。最大のプロキシネットワークに参加し、無料トライアルを入手してください。