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%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。

もっと見る

無制限のキャプチャを最高のキャプチャソルバーで解く
無制限のキャプチャを最高のキャプチャソルバーで解く

最高のキャプチャソルバーを使って、無制限のキャプチャをスムーズに解く方法を学び、キャプチャ解決の設定と自動化を効果的にするための詳細なガイド

reCAPTCHA
Logo of CapSolver

Sora Fujimoto

20-Jan-2026

最適なreCAPTCHAソルバー2026 オートメーション & ウェブスクラピング向け
最高のreCAPTCHAソルバー 2026 オートメーション & ウェブスクレイピング用

2026年のオートメーションやウェブスクレイピングに最適なreCAPTCHAソルバーを発見する。それらがどのように機能するかを学び、適切なものを選んで、ボット検出を先んじる。

reCAPTCHA
Logo of CapSolver

Emma Foster

15-Jan-2026

reCAPTCHAの解き方 C++で: 完全ガイド
reCAPTCHAの解き方 C++で: 完全ガイド

reCAPTCHAをC++で解く方法を学びましょう。CapSolver APIを使用して、プロジェクトの設定、タスクの作成、および実践的な例を用いてタスク結果を取得する方法をカバーした完全なガイドです。

reCAPTCHA
Logo of CapSolver

Ethan Collins

14-Jan-2026

リカプチャをNode.jsで解く方法 | 2024年のガイド
reCAPTCHAをNode.jsで解く方法|2026年のガイド

このガイドでは、Node.jsと解決ツールを使用して、reCAPTCHA v2とv3を簡単に解決する方法を学びます。今日から自動化のスキルを向上させましょう!

reCAPTCHA
Logo of CapSolver

Aloísio Vítor

05-Jan-2026

reCAPTCHA v2 の解決を自動化するチュートリアル: CapSolver で
reCAPTCHA v2の解決を自動化する:CapSolverを使ったチュートリアル

CapSolverを使って、reCAPTCHA v2を簡単に自動化する方法を確認してみましょう

reCAPTCHA
Logo of CapSolver

Aloísio Vítor

05-Jan-2026

パペットリー レカプチャソルバー: 細かいガイド
パペットゥイア reCAPTCHA ソルバー: 完全なガイド

パペットリヤーをreCAPTCHAソルバーとして使用する方法と、ワークフローに統合するためのさまざまな方法について探っていきます。

reCAPTCHA
Logo of CapSolver

Sora Fujimoto

04-Jan-2026