CAPSOLVER
ブログ
Puppeteer を使用して PHP で Web スクレイピングを行うための reCAPTCHA の解決方法

Puppeteer を使用して PHP で Web スクレイピングを行う際の reCAPTCHA の解決方法

Logo of CapSolver

Sora Fujimoto

AI Solutions Architect

28-Aug-2024

ウェブスクレイピング中にreCAPTCHAにぶつかってしまったことはありますか?私も経験があります。これらのCAPTCHAチャレンジは、単純なスクレイピングタスクを大きな障害に変える可能性があります。しかし心配しないでください。これらの障壁を突破するのに役立つ解決策があります。

このブログでは、強力なNode.jsライブラリであるPuppeteerを使用して、reCAPTCHAチャレンジに取り組む方法を紹介します。その後、PHPと統合して、ウェブスクレイピングタスクをよりスムーズかつ効率的にします。reCAPTCHAに対処して、シームレスにデータを手に入れる準備はできましたか?始めましょう!

ウェブスクレイピングにおけるreCAPTCHAとは

コンテキストを与えるために、reCAPTCHAは、ウェブサイトを自動化された悪用から保護するために設計されたシステムです。ユーザーは、画像内のオブジェクトを特定したり、チェックボックスをオンにするなど、人間にとっては簡単だがボットにとっては難しいタスクを完了するよう求められます。これらのチャレンジはセキュリティに役立ちますが、ウェブスクレイピングにとっては厄介なものとなる可能性があります。以下は、遭遇する可能性のある基本的なタイプです。

  • reCAPTCHA v2: このバージョンは、「私はロボットではありません」チェックボックスと画像ベースのチャレンジで知られています。ユーザーは、画像をクリックしたり、特定のアクションを実行したりして、人間であることを証明する必要がある場合があります。これは、実際のユーザーとボットを区別する上で効果的です。
  • reCAPTCHA v3: このバージョンはバックグラウンドで動作します。ユーザーの操作を要求するのではなく、サイト全体のユーザーの行動を分析して、リスクスコアを割り当てます。このスコアは、ウェブサイトが、ユーザーがボットである可能性に基づいて、アクセスを許可するかブロックするかを判断するのに役立ちます。
  • reCAPTCHA Enterprise: より高度なセキュリティ要件を持つ企業向けに、reCAPTCHA Enterprise は、洗練された脅威に対する高度な保護を提供します。強化されたリスク分析、カスタマイズ可能なスコア付け、およびスケーラビリティの向上などの機能を備えており、機密情報や重要な操作を扱う組織に適しています。

厄介なCAPTCHAを完全に解決できないことが何度も繰り返されて困っていますか?

CapsolverのAI搭載の自動Webアンブロックテクノロジーで、シームレスな自動CAPTCHA解決を実現しましょう!

トップレベルのCAPTCHAソリューションのためのボーナスコードを獲得しましょう;CapSolver: WEBS. コードを利用すると、チャージごとに5%のボーナスが追加で付与されます。無制限

これらのバージョンを理解することで、reCAPTCHAの課題を効果的に克服できます。PuppeteerとCapSolverを使用して、これらの課題に対処し、Webスクレイピングの取り組みを効率化する方法について詳しく見ていきましょう。

CapSolverがreCAPTCHAの解決をどのように支援するか

CapSolverは、reCAPTCHAを含むCAPTCHAの課題に対処するための強力なソリューションです。CapSolverをワークフローに統合して、CAPTCHAの解決を簡素化する方法を以下に示します。

  1. サイトキーを取得する
    • ブラウザの要求ログで、/recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mfのような要求を検索します。k=パラメータは、必要なサイトキーです。
    • 間違ったキーを指定した場合、次のようなエラーメッセージが表示されます。
      Copy
      Solve failed! response: {"errorId":1,"errorCode":"ERROR_INVALID_TASK_DATA","errorDescription":"Invalid site key","taskId":"1cd1e687-96dd-4f14-b8ef-18b5d144d9b8","status":"failed"}
  • 正しいreCAPTCHAバージョン(V2またはV3)を使用していないか、ターゲットサイトの種類とAPIリクエストの種類が一致しない場合、次のようなエラーが表示されることがあります。
    Copy
    Solve failed! response: {"errorId":1,"errorCode":"ERROR_CAPTCHA_SOLVE_FAILED","errorDescription":"Failed to solve the captcha: 1001","taskId":"da450cbc-ff9d-439d-908a-77e7eb8852dd","status":"failed"}
  1. 環境設定

    • 必要なパッケージをインストールします。
      bash Copy
      npm install axios puppeteer-core
  2. 統合コードの記述

php Copy
<?php

require_once 'vendor/autoload.php';
use Nesk\Puphpeteer\Puppeteer;
use Nesk\Rialto\Data\JsFunction;
use GuzzleHttp\Client;

$puppeteer = new Puppeteer;
$browser = $puppeteer->launch();

// TODO: 構成を設定する
$api_key = "YOUR_API_KEY"; // CapSolverのAPIキー
$site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"; // ターゲットサイトのサイトキー
$site_url = "https://www.google.com/recaptcha/api2/demo"; // ターゲットサイトのページURL

function capsolver()
{
    global $api_key, $site_key, $site_url;
    $client = new Client();
    $payload = [
        'clientKey' => $api_key,
        'task' => [
            'type' => 'ReCaptchaV2TaskProxyLess',
            'websiteKey' => $site_key,
            'websiteURL' => $site_url,
        ]
    ];

    try {
        $response = $client->post("https://api.capsolver.com/createTask", [
            'json' => $payload
        ]);
        $data = json_decode($response->getBody(), true);
        $task_id = $data['taskId'] ?? null;
        if (!$task_id) {
            echo "タスクの作成に失敗しました: " . json_encode($data) . PHP_EOL;
            return null;
        }
        echo "taskIdを取得しました: " . $task_id . PHP_EOL;

        while (true) {
            sleep(1);

            $getResultPayload = [
                'clientKey' => $api_key,
                'taskId' => $task_id
            ];
            $resp = $client->post("https://api.capsolver.com/getTaskResult", [


```php
<?php

function capsolver() {
    global $api_key, $site_key;

    try {
        $client = new \GuzzleHttp\Client();
        $resp = $client->post('https://api.capsolver.com/createTask', [
            'json' => [
                'clientKey' => $api_key,
                'task' => [
                    'type' => 'recaptchaV2',
                    'websiteURL' => 'https://www.google.com/recaptcha/api2/demo',
                    'websiteKey' => $site_key,
                    'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36',
                    'proxy' => 'http://127.0.0.1:8118', // Replace with your own proxy
                    'proxyType' => 'socks5' // Replace with your proxy type
                ]
            ]
        ]);
        $data = json_decode($resp->getBody(), true);
        $taskId = $data['taskId'];

        while (true) {
            $resp = $client->post('https://api.capsolver.com/getTaskResult', [
                'json' => [
                    'clientKey' => $api_key,
                    'taskId' => $taskId
                ]
            ]);
            $data = json_decode($resp->getBody(), true);
            $status = $data['status'] ?? null;

            if ($status === "ready") {
                return $data['solution']['gRecaptchaResponse'];
            }
            if ($status === "failed" || isset($data['errorId'])) {
                echo "Solve failed! response: " . json_encode($data) . PHP_EOL;
                return null;
            }
        }
    } catch (\Exception $e) {
        echo "Error: " . $e->getMessage() . PHP_EOL;
        return null;
    }
}

function reqSite() {
    global $site_url, $browser;
    $token = capsolver();
    if ($token === null) {
        return;
    }
    echo $token . PHP_EOL;

    $page = $browser->newPage();
    $page->goto($site_url);
    $evaluate_script = <<<EOD
        document.getElementById("g-recaptcha-response").value="$token";
        onSuccess("$token");
    EOD;
    $page->evaluate(JsFunction::createWithBody($evaluate_script));
    $product_element = $page->querySelector('#recaptcha-demo-submit');
    if ($product_element instanceof ElementHandle) {
        $product_element->click();
    } else {
        echo 'Element not found.' . PHP_EOL;
    }
}

reqSite();

reCAPTCHA v2、v3、またはEnterpriseのいずれを扱っているかに関わらず、CapSolverをPuppeteerと統合することで、ワークフローを簡素化し、スクレイピング効率を向上させることができます。問題が発生した場合や追加のサポートが必要な場合は、CapSolverとPuppeteerの両方が包括的なドキュメントとサポートを提供しており、あらゆる課題を克服するお手伝いをします。

コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。

もっと見る

JavaScriptでreCAPTCHAを解く: 完全なチュートリアル
JavaScriptでレカプチャを解く:完全なチュートリアル

reCAPTCHAはウェブコンテンツを効果的に保護していますが、研究やデータ分析、またはコンプライアンスに基づいた自動化タスクなど、ウェブサービスと相互作用する正当な活動を妨げる場合があります。

reCAPTCHA
Logo of CapSolver

Sora Fujimoto

02-Dec-2025

reCaptcha v3 EnterpriseをPythonで解く方法
reCAPTCHA v3 エンタープライズの解決方法 Pythonで

reCAPTCHA v3 Enterprise Pythonガイド:高スコア技術、プロキシオプション、CapSolverとの統合による安定した0.7~0.9の結果

reCAPTCHA
Logo of CapSolver

Sora Fujimoto

02-Dec-2025

AIスクラビングワークフローにCAPTCHA解決を組み込む方法
AIスクリーピングワークフローにCAPTCHA解決を組み込む方法

CAPTCHA解決サービスをAIスクリーピングワークフローに統合する方法を習得してください。reCAPTCHA v3、Cloudflare、AWS WAFのベストプラクティスを学んで、信頼性の高い大量データ収集を確保してください

reCAPTCHA
Logo of CapSolver

Sora Fujimoto

28-Nov-2025

reCaptcha v3をNode.JSで解決する方法
reCAPTCHA v3 を Node.JS で解決する方法

この記事では、Node.JS を使って reCaptcha v3 を解く方法を紹介します。

reCAPTCHA
Logo of CapSolver

Sora Fujimoto

28-Nov-2025

reCAPTCHA v3をPythonで解決する方法
reCAPTCHA v3 を Python で解決する方法

PythonとCapSolverを用いてGoogle reCAPTCHA v3を解く方法を学び、高いスコアを取得し、オートメーションワークフローに統合してください。

reCAPTCHA
Logo of CapSolver

Sora Fujimoto

28-Nov-2025

CapSolverのキャプチャソルバー Chrome エクステンション
CapSolverのキャプチャソルバー Chrome拡張機能

CapSolverのAI Chrome拡張機能は、高い精度で、最小限の設定でキャプチャを自動で解く—自動化に最適です。

reCAPTCHA
Logo of CapSolver

Sora Fujimoto

27-Nov-2025