PuppeteerでCAPTCHAを回避する方法

ステルスプラグインと高度な技術を用いたPuppeteerによるCAPTCHA回避を学び、シームレスな自動化を実現する。
2 分読
How to bypass CAPTCHAs with Puppeteer blog image

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

  • CAPTCHAとは何か、そしてそれを回避できるかどうか
  • ステップバイステップチュートリアルでPuppeteerを用いたCAPTCHA回避方法
  • Puppeteerでの手順が機能しない場合の対処法

さあ、始めましょう!

CAPTCHAとは?回避は可能か?

CAPTCHA(Completely Automated Public Turing tests to tell Computers and Humans Apart)とは、人間と自動化されたボットを区別するためのチャレンジ・レスポンステストです。その目的を達成するため、CAPTCHAは人間には簡単に解ける一方で、ソフトウェアには困難なように設計されています。

代表的なCAPTCHAプロバイダーにはGooglereCAPTCHAhCaptcha、BotDetectがあり、一般的なCAPTCHAの種類は以下の通りです:

  • テキストベース:文字や数字を認識して入力する課題。
  • 画像ベース:画像グリッド内の特定のオブジェクトを識別し、正しい画像を選択するテスト。
  • 音声ベース:このタイプでは、ユーザーは聞いた文字を書き取る必要があります。
  • パズル形式:ユーザーがピースを所定の位置にスライドさせて簡単なパズルを解く形式。

CAPTCHAは自動化ソフトウェアやボットによる回避が困難なように設計されています。そのため、ソフトウェアにCAPTCHAの解決ライブラリやサービス(人間のオペレーターに依存する自動化ソリューション)を統合することが可能です。

ただし、ハードコードされたCAPTCHAは、ウェブサイトの全体的なユーザー体験に悪影響を与えるため一般的ではありません。このため、CAPTCHAはより広範なボット対策ソリューションの一部として使用されることが一般的です。例えばWAF(Webアプリケーションファイアウォール)の場合:

A CAPTCHA on G2 generated by Cloudflare

この場合、システムはボットがウェブサイト上で何らかの活動を行っている疑いがあるときに動的にCAPTCHAを表示します。これらのCAPTCHAを回避するには、人間の行動を模倣するボットを開発する必要があります。これは可能ですが、特に新しいボット検出技術や手法に遅れを取らないようスクリプトを頻繁に更新する必要があるため、多大な労力を要します。

朗報です。CAPTCHAを回避するより効果的な解決策があります:BrightDataのCAPTCHAソルバーです!この常に最新の状態を保つツールは、CAPTCHA回避に関連するあらゆる問題を、面倒な手間なしに解決します。

PuppeteerでCAPTCHAを回避する方法:ステップバイステップチュートリアル

それでは、人間の行動を模倣してCAPTCHAを回避する自動化スクリプトを作成しましょう。

そのために使用できるのがPuppeteerです。これはウェブブラウザを制御する高レベルAPIを提供するJavaScriptライブラリであり、人間の行動を模倣するために使用できます。

さあ始めましょう!

ステップ #1: プロジェクト設定

プロジェクトのメインフォルダをbypass_captcha_puppeteer と名付けるとします。リポジトリの構造は以下のようになります:

bypass_captcha_puppeteer/
├── index.js
└── package.json

以下のコマンドで作成できます:

mkdir bypass_captcha_puppeteer

次に、プロジェクトフォルダに移動し、npm init を実行して Node.js アプリケーションを初期化します:

cd bypass_captcha_puppeteer
npm init -y

次に、その中にindex.jsファイルを作成します

Puppeteerを以下のようにインストールします:

npm install puppeteer

ステップ #2: ESM JavaScript 表記を使用する

JavaScriptでECMAScript Modules表記を使用するには、package.jsonファイルに「type」:「module」オプションが必要です。

package.jsonファイルは以下のように記述します:

{
  "name": "bypass_captcha_puppeteer",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "puppeteer": "^23.10.4"
  }
}

ステップ #3: Puppeteer で CAPTCHA を回避する

Puppeteerがボットとして認識されるかどうかを確認するため、index.jsファイルに以下のコードを記述します:

import puppeteer from 'puppeteer';

const visitBotAnalyzerPage = async () => {
  try {
    // ブラウザを初期化
    const browser = await puppeteer.launch();

    // 新しいブラウザページを開く
    const page = await browser.newPage();

    // ターゲットURLに移動
    const url = 'https://bot.sannysoft.com/';
    console.log(`${url} に移動中...`);
    await page.goto(url, { waitUntil: 'networkidle2' });
    
    // ページ全体のスクリーンショットを保存
    console.log('ページ全体のスクリーンショットを撮影中...');
    await page.screenshot({ path: 'anti-bot-analysis.png', fullPage: true });
    console.log('スクリーンショットを撮影しました');
    
    // ブラウザを閉じる
    await browser.close();
    console.log('Browser closed');
  } catch (error) {
    console.error('An error occurred:', error);
  }
};

// スクリプトを実行
visitBotAnalyzerPage();

このコードの動作は以下の通りです:

  1. ブラウザを起動:puppeteer.launch() メソッドは可視 UI 付きの新規ブラウザインスタンスを開始します (headless: false)。
  2. 新規ブラウザページを開く:`browser.newPage()` は、さらなる操作を実行できる新しい空白のブラウザページを作成します。
  3. 対象ページへ移動: page.goto() メソッドが対象ページ(Intoli.com tests)へリダイレクトします。このページはリクエストがボットからのものか否かを判別するために設計されています。
  4. 結果のスクリーンショットを保存: page.screenshot() メソッドが結果のスクリーンショットを取得し保存します。
  5. ブラウザを閉じエラーを処理browser.close() はブラウザを閉じ、発生したエラーを捕捉します。

コードを実行するには以下を入力:

node index.js

保存された画像を開くことができます。これが期待される結果です:

The expected result

画像が示す通り、Puppeteerはいくつかのテストに合格していません。したがって、Puppeteerでページを操作する際、WAFがCAPTCHAを表示する可能性が高くなります。

これらの問題を解決するため、Puppeteer Stealthを使用しましょう!

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

Puppeteer ExtraはPuppeteerを軽量にラップするライブラリで、特にStealthプラグインのインストールを可能にします。このプラグインは複数の設定を上書きし、ブラウザインスタンスを自然で「人間らしい」動作に見せることでボット検知を回避します。

以下のライブラリを次のようにインストールします:

npm install puppeteer-extra puppeteer-extra-plugin-stealth

puppeteer ではなくpuppeteer-extra から Puppeteer をインポートします:

import puppeteer from 'puppeteer-extra';

素晴らしい!これでPuppeteerでCAPTCHA回避を試みるStealthプラグインの使用準備が整いました。

ステップ #5: Stealth プラグインでテストを繰り返す

次に、以下のコード行でStealthプラグインを実装します:

puppeteer.use(StealthPlugin()).

これによりコードは次のようになります:

import puppeteer from 'puppeteer-extra';
import StealthPlugin from 'puppeteer-extra-plugin-stealth';

// Puppeteerにステルスプラグインを追加
puppeteer.use(StealthPlugin());

const visitBotAnalyzerPage = async () => {
  try {
    // ステルス設定でブラウザを起動
    const browser = await puppeteer.launch();
    console.log('ステルスモードでブラウザを起動中...');
    
    // 新しいページを開く
    const page = await browser.newPage();

    // 対象ページへ移動
    const url = 'https://bot.sannysoft.com/';
    console.log(`${url} へ移動中...`);
    await page.goto(url, { waitUntil: 'networkidle2' });

    // ページ全体のスクリーンショットを保存
    console.log('ページ全体のスクリーンショットを撮影中...');
    await page.screenshot({ path: 'anti-bot-analysis.png', fullPage: true });
    console.log(`スクリーンショットを撮影しました`);

    // ブラウザを閉じる
    await browser.close();
    console.log('Browser closed. Script completed successfully');
  } catch (error) {
    console.error('Error occurred:', error);
  }
};

// スクリプトを実行
visitBotAnalyzerPage();

次に、以下の方法でコードを再度実行します:

node index.js

期待される結果は:

The final expected result after running the code

やった!スクリプトがボット検知テストを通過しました。これでPuppeteer使用時にCAPTCHAが表示される可能性が低くなります!

PuppeteerでCAPTCHAを回避する上記の手順が機能しない場合の対処法

残念ながら、Puppeteer Extraが万能というわけではありません。その理由は、ブラウザ設定だけがボット対策システムが自動化ソフトウェアをブロックするために注目する要素ではないからです。

例えば、ユーザーエージェントも自動化ソフトウェアをブロックするためにアンチボットシステムが使用する要素の一つです。この問題を解決するには、ユーザーエージェントを匿名化するライブラリpuppeteer-extra-plugin-anonymize-ua を使用できます。

ただし、前述のプラグインベースのアプローチは基本的なアンチボット対策にしか有効ではありません。Cloudflareのようなより複雑なツールに対処するには、より強力な手段が必要です。

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

これらは専用のCAPTCHAの解決機能を備え、reCAPTCHAhCaptchapx_captchaSimpleCaptchaGeeTest CAPTCHAFunCaptchaCloudflare TurnstileAWS WAF CaptchaKeyCAPTCHAなど、数多くのCAPTCHAを自動的に処理する優れた解除能力を提供します。

Bright DataのCAPTCHAソルバーは、あらゆるHTTPクライアントやブラウザ自動化ツールと連携するため、スクリプトへの統合が簡単です。

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

まとめ

この記事では、Puppeteer を使用して CAPTCHA を回避することが困難な理由と、Stealth プラグインを使用してデフォルトのブラウザ設定を上書きし、ボット検出を回避する方法について学びました。

この手法の問題点は、単純なシナリオでのみ有効であることです。高度なボット検知システムは依然としてあなたをボットと識別し、ブロックする可能性があります。

したがって、CAPTCHAを回避する真の解決策は、あらゆるウェブページのCAPTCHAフリーHTMLをシームレスに返すアンロックAPIを介してターゲットページに接続することです。この解決策はWeb Unlockerと呼ばれ、プロキシ統合によるリクエストごとの出口IP自動ローテーション、ブラウザフィンガープリンティング対策、自動リトライ、CAPTCHA解決を自動的に処理します。

Bright Dataのスクラッピング製品の中から、ご自身のニーズに最適なソリューションを見つけるため、今すぐサインアップしてください。

無料トライアルから始めましょう!