reCAPTCHA v3
と CapMonster Cloud

CAPTCHA の解決、サイトへの設置とテスト。

reCAPTCHA v3ソリューションの価格

キャプチャ
価格 (USD)
$ 0.90
1000トークン
キャプチャや防御機構が導入済みのサイトを引き継いだのに、ソースコードへアクセスできない? その場合、どの仕組みが入っているのか、設定は正しいのか、どう検証するのかが気になります。

この記事では、よくある疑問にできるだけお答えしました。まず最初のステップは、どのような保護システムが使われているかを特定することです。そのために、代表的なキャプチャやボット対策システムの一覧を参照できます。ここには、どの仕組みが使われているかを素早く見分けるための画面イメージや主な特徴がまとめられています。

もしサイトで reCAPTCHA v3 が使われていることが分かったら、次のステップはその特徴と動作をより詳しく確認することです。同じこの記事の中で、reCAPTCHA v3 をサイトに導入するための手順書も確認できるので、あなたのサイト上でどのように機能しているのかをしっかり理解できます。これにより、現在の保護を正しく把握できるだけでなく、今後の運用や保守も計画的に行えるようになります。

Google reCAPTCHA v3 とは
Google reCAPTCHA v3 とは
reCAPTCHA v3 は、Google が提供する不可視型の保護機能で、「私はロボットではありません」というチェックを行わずに、実際のユーザーとボットを判別します。ページ上では非表示のスクリプトが動作し、訪問者の行動を分析して 0.0〜1.0 の範囲で 信頼スコア(score) を付与します。開発者は閾値を設定し、その値を下回った場合に追加認証やブロックを行うことで、ユーザーに余計な操作をさせることなく高いセキュリティを実現できます。

CapMonster Cloud を使って reCAPTCHA v3 を解決する方法

reCAPTCHA v3 を含むフォームをテストする際は、キャプチャが正しく組み込まれ機能しているか確認する必要があります。

サイトに埋め込まれたキャプチャを手動で確認する方法

  • フォームのページを開き、キャプチャが表示されることを確かめます。
  • 解決せずにフォーム送信を試みると、サーバーはエラーを返すはずです。
  • 正しく解決した後は、問題なく送信できる必要があります。

自動解決には CapMonster Cloud のようなツールを使うと便利です。キャプチャのパラメータを送信すると、サーバー側で処理して利用可能なトークンを返してくれます。そのトークンをフォームに挿入すれば、ユーザー操作なしでチェックを通過できます。

CapMonster Cloud API を使った一般的な手順:

タスクの作成タスクの作成
arrow
API リクエストの送信API リクエストの送信
arrow
結果の受信結果の受信
arrow
トークンをページへ適用トークンをページへ適用
arrow
既存ライブラリを使った reCAPTCHA v3 の認識
CapMonster Cloud は、PythonJavaScript(Node.js)、C# 向けに、簡単に統合できる公式ライブラリを提供しています。
Python
JavaScript
C#
解決・トークンの埋め込み・フォーム送信までの一連の流れ
ここでは、Web ページ上の CAPTCHA をフルサイクルで処理する Node.js の例を紹介します。アプローチとしては、(1) HTTP リクエストで HTML と CAPTCHA パラメータを取得し、解答を送信して結果を処理する方法、または (2) Playwright などの自動化ツールを使い、ページを開いて CAPTCHA の表示を待ち、パラメータを送信(テスト用に正しい値・誤った値の両方を送ることも可能)、CapMonster Cloud クライアントで結果を取得し、トークンをフォームに埋め込んでレスポンスを確認する方法などがあります。
const { chromium } = require('playwright');
const { 
  CapMonsterCloudClientFactory, 
  ClientOptions, 
  RecaptchaV3ProxylessRequest 
} = require('@zennolab_com/capmonstercloud-client');

(async () => {
  const TARGET_URL = 'https://lessons.zennolab.com/captchas/recaptcha/v3.php?level=beta'; // CAPTCHA が設置されているページの URL
  const SITE_KEY = '6Le0xVgUAAAAAIt20XEB4rVhYOODgTl00d8juDob';
  const API_KEY = 'your_capmonster_cloud_api_key'; // CapMonster Cloud の API キーを指定してください

  // CapMonster クライアントの生成
  const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));

  // ブラウザを起動
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();
  await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded' });

  // reCAPTCHA v3 タスクの設定
  const recaptchaRequest = new RecaptchaV3ProxylessRequest({
    websiteURL: TARGET_URL,
    websiteKey: SITE_KEY,
    minScore: 0.6,
    pageAction: 'myverify', // ページ上の action と一致させる
  });

  // CAPTCHA を解決
  const solution = await cmcClient.Solve(recaptchaRequest);
  const token = solution.solution?.gRecaptchaResponse;

  if (!token) {
    console.error('トークンが空です。sitekey と URL を確認してください');
    await browser.close();
    return;
  }

  console.log('取得したトークン:', token);

  // トークンを hidden フィールドに挿入し、ボタンのクリックをエミュレート 
  // 必要なセレクターに置き換えてください
  await page.evaluate((t) => {
    const input = document.querySelector('#v3_token');
    if (input) input.value = t;

    const form = document.querySelector('#v3_form');
    if (form) form.submit();
  }, token);

  console.log('トークンが挿入され、フォームが送信されました');

  await page.waitForTimeout(5000);
  await browser.close();
})();
reCAPTCHA v3 を自分のサイトに導入する方法
サイト上での CAPTCHA の動作や検証ロジックを正しく理解し、再設定や再導入をスムーズに行うために、このセクションの内容を確認することをおすすめします。ここでは保護機能の導入プロセスを説明しており、各種ポイントをすばやく把握するのに役立ちます。

1. reCAPTCHA の 管理コンソール ページにアクセスします。

2. 新しいサイトを登録し、CAPTCHA の種類として reCAPTCHA v3 を選択します

HowTo Connect image 1

3. 次の 2 種類のキーを取得します:

  • Site key — 公開キー(フロントエンドで使用);
  • Secret key — 秘密キー(サーバー側での検証に使用)

HowTo Connect image 2

設定画面では、reCAPTCHA を利用できるドメインの追加指定や、サイトの問題発生時や不審なトラフィック増加時の通知設定などを行うこともできます。

4. クライアントサイド用コード例

reCAPTCHA v3 を利用する最も簡単な方法は、JavaScript API を読み込み、ボタンに属性を追加することです。

API の読み込み:

<script src="https://www.google.com/recaptcha/api.js"></script>

フォーム用のコールバック関数:

<script>
  function onSubmit(token) {
    document.getElementById("form").submit();
  }
</script>

reCAPTCHA 属性付きボタン:

<button class="g-recaptcha" 
        data-sitekey="reCAPTCHA_sitekey" 
        data-callback='onSubmit' 
        data-action='submit'>Submit</button>

より細かく制御したい場合は、render パラメータ付きの grecaptcha.execute を使用します。

サイトキー付きでの API 読み込み:

<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>

プログラムからの実行例:

<script>
  function onClick(e) {
    e.preventDefault();
    grecaptcha.ready(function() {
      grecaptcha.execute('reCAPTCHA_sitekey', {action: 'submit'}).then(function(token) {
          // 検証のため、トークンをサーバーへ送信する
      });
    });
  }
</script>

トークンは取得後すぐにサーバーへ送信して検証を行う必要があります。

重要な注意事項:

  • トークンの有効期限: reCAPTCHA v3 から返されるトークンの有効期限は 2 分です。この時間内にサーバーへ送信してください。
  • サーバー側検証: サーバーがトークンを受け取ったら、https://www.google.com/recaptcha/api/siteverify に対して以下のパラメータで POST リクエストを送信します:
    – secret: あなたの Secret キー
    – response: クライアントから受け取ったトークン
    – remoteip(任意): ユーザーの IP アドレス
  • Google のサーバーは、検証結果に関する情報を含む JSON レスポンスを返します。

5. 次に、サーバー側でレスポンスを検証します

PHP の例PHP の例
arrow

補足:

  • クライアント側では、トークンを recaptcha-token という名前の hidden フィールドでサーバーへ送信していることを確認してください。
    • <input type="hidden" name="recaptcha-token" id="recaptcha-token">

      • score の閾値は、求める厳格さに応じて(例: 0.3〜0.7)調整できます。
      • action === 'submit' をチェックすることで、トークンがページ上の特定の送信アクション用であることを保証し、セキュリティを高めることができます。
Background
想定されるエラーとデバッグ
Bug Icon
サイトまたはキーが不正
CAPTCHA が読み込まれない、または invalid-input-secret が返されます。
Bug Icon
解決タイムアウト
サーバーが結果を待っている間にタイムアウトしました。待機時間を延長してください。
Bug Icon
トークンが空
結果をページへ渡す際にエラーが発生しました。
Bug Icon
レスポンス success=false
トークンの有効期限が切れている、再利用されている、または改ざんされています。原因調査のため、リクエストのログ出力を有効にし、Google のレスポンス内の error-codes フィールドを確認してください。
Bug Icon
スコアが低い(例: <0.5)
たとえ success=true でも、スコアが低い場合は拒否される可能性があります。Google はこのスコアに基づいてユーザーの信頼度を評価します。
Bug Icon
action を確認する
トークンがページ上の特定のアクション用に発行されたものであることを確認するためです
保護の堅牢性チェック
統合後は、システムが本当に自動化された操作からサイトを守れているか確認しましょう。
セキュリティと最適化のヒント
<span class="font-bold">Secret Key</span> はサーバー側のみに保存し、クライアント側には絶対に渡さないでください。
拒否の理由を把握するために、エラーコード(<span class="font-bold">error-codes</span>)と<span class="font-bold">score</span>の値をログに記録してください。
トークンがページ上の想定したアクション用であることを確認するため、Google のレスポンス内の <span class="font-bold">action</span> フィールドを必ず確認してください。
ライセンス要件に従い、フォーム下部に <span class="font-bold">プライバシーポリシー</span> と <span class="font-bold">Google 利用規約</span> へのリンクを追加してください。
まとめ

すでにキャプチャや別の保護システムが導入されているサイトを引き継いだものの、コードにはアクセスできない場合でも心配はいりません!どの技術が使われているかを特定するのはそれほど難しくありません。動作が正しいか確認するには、隔離されたテスト環境で認識サービスCapMonster Cloudを利用し、トークン処理の仕組みと検証ロジックが正しく機能しているかをチェックできます。

reCAPTCHA v3の場合も、システムを特定し、その挙動を調べて、保護機能が正しく動いていることを確認すれば十分です。この記事では、reCAPTCHA v3を見分ける方法と、その導入や再設定に関する手順書の見つけ方を紹介しました。これにより、防御を安心して維持し、その動作をしっかりと管理できます。

Conclusion

reCAPTCHA v3 に関するよくある質問

CapMonster Cloud は Python、JavaScript(Node.js)、C# 向けの公式クライアントライブラリを提供しています。これらのライブラリは reCAPTCHA v3 の統合を簡素化し、HTTP リクエストを手動で実装する必要をなくします。

例えば Node.js では @zennolab_com/capmonstercloud-client パッケージを使用でき、わずか数行のコードでトークンを取得してフォームに注入できます。

お使いの言語向けの専用ライブラリがない場合は、汎用 REST API(createTask / getTaskResult)を使用してください。curl、requests、axios など任意の HTTP クライアントで動作します。

リクエストの完全な構造は API ドキュメントで確認できます。

minScore パラメータは 0.1 から 0.9 の値を受け付け、返されるトークンが持つべき最小の trust score を CapMonster Cloud に伝えます。0.7 は妥当な出発点です。高すぎる値(例:0.9)は解決失敗の可能性を高め、低すぎる値はサーバー側のしきい値で拒否されるスコアのトークンを返す可能性があります。テスト環境での実際の拒否率に合わせて値を調整してください。

reCAPTCHA v3 から受け取ったトークンは約 2 分間有効です。自動化パイプラインはこの時間内にトークンをサーバーに送信する必要があります。期限切れ後、Google の siteverify エンドポイントは success: false を返します。解決ステップをフォーム送信にできるだけ近づけ、リクエスト間でトークンをキャッシュしないでください。

reCAPTCHA v3 トークンを注入するには、非表示のレスポンスフィールド(通常は ID g-recaptcha-response の textarea または input)を見つけ、CAPTCHA ソルバーサービスから取得したトークンを挿入します。3 つの自動化フレームワークでの方法は以下のとおりです。

Playwright / Puppeteer(Node.js)

const token = "YOUR_TOKEN";
await page.evaluate((t) => {
  document.getElementById('g-recaptcha-response').value = t;
}, token);
await page.click('#submit-btn');

Selenium(Python)

token = "YOUR_TOKEN"
driver.execute_script(f"document.getElementById('g-recaptcha-response').value = '{token}';")
driver.find_element("id", "submit-btn").click()

一部のサイトはトークン検証にコールバック関数を使用します。フォームが送信されない場合、コンソール(___grecaptcha_cfg.clients)で関数名を見つけて手動で呼び出してください:

// Example of calling a callback in Playwright/Puppeteer
await page.evaluate((t) => { window.onSuccessCallback(t); }, token);

Google からの success: true レスポンスは、トークンが有効であることのみを意味します。トークンスコアが設定したしきい値を下回る場合、バックエンドはリクエストを拒否する可能性があります。

もう一つの一般的な問題は action の不一致です。トークンはタスク作成時に使用した action 値と同じ値で検証する必要があります。

問題の診断:

  • siteverify レスポンスの score フィールドを確認する;
  • action 値が一致することを確認する;
  • success が false の場合は error-codes を調べる。

success が true の場合、error-codes 配列は通常空なので、主に確認すべきフィールドは score と action です。