PlaywrightでCAPTCHAを回避する方法

Playwrightを使用したCAPTCHA回避方法を学び、ウェブスクレイピングタスクを中断なく円滑に実行できるようにしましょう。
2 分読
How to Bypass CAPTCHAs With Playwright blog image

このガイドでは以下を学びます:

  • CAPTCHAとは何か、回避可能か否か
  • PlaywrightによるCAPTCHA回避ロジックの実装方法
  • CAPTCHAが依然として表示される場合の対応策

さあ、始めましょう!

CAPTCHAとは何か?回避は可能か?

CAPTCHA(完全自動化公開チューリングテスト:コンピュータと人間を区別するため)、人間ユーザーと自動化されたボットを区別するために使用されるテストです。これは、人間には簡単だが機械には解くのが難しいように特別に設計された課題です。 

Example of a CAPTCHA

代表的なCAPTCHAプロバイダーにはGoogle reCAPTCHA、hCaptcha、BotDetectなどがあります。これらは通常、以下のCAPTCHAタイプの1つ以上をサポートしています:

  • 画像ベースの課題:ユーザーは画像グリッド内の特定のオブジェクトを識別するか、与えられた前提条件に合致する画像を特定する必要があります。
  • テキストベースの課題:歪んだ文字や数字の列を入力する必要があります。
  • 音声ベースの課題:ユーザーは聞いた単語を入力するよう求められます。
  • パズル課題:ユーザーはピースを所定の位置にスライドさせるなど、簡単なパズルを解く必要があります。

CAPTCHAは特定のユーザーフローの一部となる場合があります。例えば、フォーム送信の最終ステップなどです:

CAPTCHA as a step of a form submission process example

この場合、CAPTCHAは常に表示され、ボットが回避することは事実上不可能です。対応策としては、CAPTCHAの解決ライブラリをソフトウェアに統合して自動化するか、人間のオペレーターがリアルタイムで課題を解決するサービスを利用する方法があります。ただし、煩わしくユーザー体験を損なうため、ハードコードされたCAPTCHAは一般的ではありません。

より一般的なのは、WAF(Web アプリケーションファイアウォール)など広範なボット対策ソリューションの一部としてCAPTCHAが使用されるケースです:

Example of a Web Application Firewall

これらのシステムは、ユーザーがボットであると疑われる場合に動的にCAPTCHAを表示します。このような場合、ボットに人間の行動を模倣させることでCAPTCHAを回避できます。とはいえ、これは猫とネズミの駆け引きのようなもので、新たなボット検知対策を回避するためには自動化スクリプトを継続的に更新する必要があります。

CAPTCHA回避に対するより効果的な解決策は、Bright DataのCAPTCHA Solverのような、ユーザーエミュレーションベースで常に最新の状態を保つツールを使用することです。 

PlaywrightによるCAPTCHA回避:ステップバイステップチュートリアル

先ほど学んだように、CAPTCHA回避の有効な手法は、人間のようなフィンガープリントを使用しながら自動スクリプトに人間の行動を模倣させることです。この目的に最適なツールの一つがPlaywrightです。これは主要なブラウザ自動化ライブラリであり、年間トップウェブスクレイピングツールのリストにも登場しています。

このチュートリアルセクションでは、PlaywrightによるCAPTCHA回避ロジックの実装方法を解説します。JavaScriptのNode.jsスクリプトを用いてこの目標を達成する手法を学びます。Python開発者の方は、Playwright Stealthに関する同等のガイドをご参照ください。

それでは始めましょう!

ステップ #1: Node.jsプロジェクトの初期化

Playwrightを使用したウェブスクレイピングやテストスクリプトが既に存在する場合、このステップはスキップできます。そうでない場合は、Playwright CAPTCHAソルバープロジェクト用のフォルダを作成し、ターミナルで以下を入力します:

mkdir playwright_demo

cd playwright_demo

以下のnpm initコマンドで、その中に新しいNode.jsプロジェクトを初期化します:

npm init -y

お気に入りのJavaScript IDEでプロジェクトフォルダを開き、新しいscript.jsファイルを追加します。

Adding a new script.js file in the IDE

次に、package.jsonを開き、以下の記述を追加してプロジェクトをモジュールとしてマークすることを忘れないでください:

"type": "module"

これでプロジェクトフォルダ内にNode.jsアプリケーションが作成されました。

ステップ #2: Playwright Extra のインストール

Playwrightの既知の弱点の一つは、プラグインをサポートしていないことです。コミュニティはこの欠点を補うため、プラグインサポートを拡張するライブラリ「Playwright Extra開発しました。

以下のコマンドでプロジェクトの依存関係にplaywrightplaywright-extraを追加します:

npm i playwright playwright-extra

時間がかかる場合がありますので、しばらくお待ちください。

ステップ #3: Playwrightスクリプトの設定

PlaywrightにCAPTCHAの課題を解決させるため、スクリプトを初期化する段階です。script.jsに次の行を追加し、playwright-extraから制御したいブラウザをインポートします:

import { chromium } from "playwright-extra"

この例では、Chromium での人間の行動を自動化します。

次に、Playwright APIを使用して人間のような操作を実行する新しい非同期関数を初期化します:

(async () => {

    // ブラウザを設定して起動

    const browser = await chromium.launch()

    // 新しい空白ページを開く

    const page = await browser.newPage()

    // ブラウザ自動化ロジック...

    // ブラウザを閉じてリソースを解放

    await browser.close()

})()

これで新しいChromiumインスタンスが起動され、ブラウザを閉じる前に新しいページが開かれます。これでブラウザ自動化ロジックを追加する準備が整いました!

ステップ #4: ブラウザ自動化ロジックの実装

対象サイトはbot.sannysoft.com です。これはユーザーが人間かボットかを判別するため、ブラウザ内でいくつかのテストを実行する特別なウェブページです。ローカルブラウザでこのページにアクセスすると、すべてのテストが通過していることが確認できるはずです。 

goto()メソッドを使用してターゲットページに接続します:

await page.goto("https://bot.sannysoft.com/")

次に、ページ全体のスクリーンショットを撮影し、ボット対策テストの結果を確認します:

await page.screenshot("results.png")

これらをまとめると、以下のscript.jsファイルが得られます:

import { chromium } from "playwright-extra"

(async () => {

    // ブラウザの設定と起動

    const browser = await chromium.launch()

    // 新規空白ページを開く

    const page = await browser.newPage()

    // 対象ページに移動

    await page.goto("https://bot.sannysoft.com/")

    // ページ全体のスクリーンショットを撮影

    await page.screenshot({

        path: "results.png",

        fullPage: true

    })

    // ブラウザを閉じてリソースを解放

    await browser.close()

})()

以下のコマンドで上記コードを実行:

 node script.js

このスクリプトはヘッドレスモードでChromiumインスタンスを開き、目的のページにアクセスしてスクリーンショットを撮影後、ブラウザを閉じます。スクリプト実行終了時にプロジェクトルートフォルダに生成されるresults.pngファイルを開くと、以下のような画像が表示されます:

results.png file example

ご覧の通り、ヘッドレスモードの標準Playwrightではいくつかのテストに合格しません。これがPlaywrightでページを操作する際、WAFがCAPTCHAを表示する理由です。解決策は?Stealthプラグインです!

ステップ #5: Playwright Stealth プラグインのインストール

Playwright Stealthは、ボット検知を防ぐplaywright-extra用プラグインです。このプラグインは複数の設定を上書きし、ブラウザインスタンスをPlaywrightで制御されていない自然な状態に見せかけます。具体的には、ブラウザのプロパティを変更して、自動化を露呈するあらゆる情報漏洩を防ぎます。 

Stealthプラグインは元々Puppeteer Extra向けに開発されましたが、Playwright Extraでも動作します。以下のコマンドでpuppeteer-extra-plugin-stealthnpmパッケージをインストールしてください:

npm i puppeteer-extra-plugin-stealth

次に、script.jsファイルで以下の行を使用してStealthプラグインをインポートします:

import StealthPlugin from "puppeteer-extra-plugin-stealth"

ステップ #6: Stealth設定の登録

PlaywrightのCAPTCHA回避ロジックを実装するには、playwright-extra内で Stealthプラグインをuse()メソッドを通じて登録します:

chromium.use(StealthPlugin())

これにより、Playwrightが制御するブラウザは、人間ユーザーが使用する実世界のブラウザとして認識されるようになります。

ステップ #7: ボット検出テストを再実行

現在のscript.jsファイルは次のようになります:

import { chromium } from "playwright-extra"

import StealthPlugin from "puppeteer-extra-plugin-stealth"

(async () => {

    // Stealthプラグインを登録

    chromium.use(StealthPlugin())

    // ブラウザを設定して起動

    const browser = await chromium.launch()

    // 新しい空白ページを開く

    const page = await browser.newPage()

    // 対象ページに移動

    await page.goto("https://bot.sannysoft.com/")

    // ページ全体のスクリーンショットを撮影

    await page.screenshot({

        path: "results.png",

        fullPage: true

    })

    // ブラウザを閉じ、リソースを解放

    await browser.close()

})()

スクリプトを再度実行:

node script.js

results.pngを再度開くと、すべてのボット検知テストに合格したことが確認できます:

results.png file second example - bot-detection tests passed

これで完了!PlaywrightのCAPTCHA回避トリックが完成しました!

上記のPlaywright CAPTCHAソルバー解決策が機能しない場合は?

残念ながら、アンチボットツールが注目するのはブラウザ設定だけではありません。IPレピュテーションも重要な要素であり、無料ライブラリで出口IPを変更することはできません。そのためにはPlaywrightプロキシ統合が必要です!

したがって、ブラウザを最適に設定してもCAPTCHAが表示される場合があります。単一クリックのみで解決できる簡易CAPTCHAにはpuppeteer-extra-plugin-recaptchaプラグインが有効です。ただし前章で紹介したプラグインベースのアプローチは基本的なボット対策にしか有効ではありません。Cloudflareのような高度なツールに対処するには、より強力な手段が必要です。

真のPlaywright CAPTCHAソルバーをお探しですか?Bright Dataのウェブスクレイピングソリューションをお試しください!

専用のCAPTCHAの解決機能により、reCAPTCHAhCaptchapx_captchaSimpleCaptchaGeeTest CAPTCHAFunCaptchaCloudflare TurnstileAWS WAF CaptchaKeyCAPTCHAなど、数多くのCAPTCHAを自動処理する優れた解除能力を提供します。Bright DataのCAPTCHAソルバーは、あらゆるHTTPクライアントやブラウザ自動化ツールと連携するため、スクリプトへの統合が簡単です。

Bright DataのCAPTCHAソルバーの使用方法の詳細についてはこちらをご覧ください。また、すべての統合および設定の詳細については、ドキュメントをご確認ください。

まとめ

本記事では、PlaywrightにおけるCAPTCHAの課題とその解決策について解説しました。Playwright Stealthライブラリを使用すれば、デフォルトのブラウザ設定を上書きしてボット検知を回避できます。ただし、この手法だけでは不十分な場合もあります。

Playwrightスクリプトがどれほど洗練されていても、高度なボット検知システムは依然としてボットと識別する可能性があります。解決策は、アンロックAPIを介してターゲットページに接続することです。このAPIは、あらゆるウェブページのCAPTCHAフリーHTMLをシームレスに返すことができます。

そのAPIがWeb Unlockerです。プロキシ連携によるリクエストごとの出口IP自動ローテーション、ブラウザフィンガープリンティング対策、自動リトライ、CAPTCHA解決を自動化します。ボット対策は忘れてください!

今すぐ登録して無料トライアルを開始しましょう。