# token で reCAPTCHA を通過する

> reCAPTCHA の token（gRecaptchaResponse）を取得した後の使い方。仕組み、リクエストを直接送信する方法（g-recaptcha-response フィールド）、ブラウザに入力してコールバック関数を呼び出す方法を、Google のデモページを使った Python の完全なサンプル付きで解説します。

Source: https://docs.yescaptcha.com/ja/guides/submit-recaptcha-token/ · Last verified: 2026-10-15

> This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/guides/submit-recaptcha-token/

YesCaptcha が返す `gRecaptchaResponse` は、ページ上でキャプチャを完了したときに Google がページへ渡す結果と同じものです。取得したら、ブラウザと同じように**対象のウェブサイトへ送信**する必要があります（Google や YesCaptcha には送信しません）。サイトはそれを Google に照会して検証し、通過させます。方法は 2 つあります。リクエストを直接送信する方法と、ブラウザのページに入力して送信する方法です。

## 仕組み

通常のアクセスでは、次の流れになります。

1.  ページが reCAPTCHA を読み込み、ユーザーが認証を完了する。
2.  Google がページに token を渡し、ページがそれを `g-recaptcha-response` テキストボックスに入れる（またはコールバック関数に渡す）。
3.  ユーザーがフォームを送信すると、token もフォームと一緒にサイトのサーバーへ送られる。
4.  サイトのサーバーが token を Google に照会して検証し、問題なければ通過させる。

YesCaptcha を使う場合、手順 1 と 2 は YesCaptcha が行います。`websiteURL` と `websiteKey` でタスクを作成して token を取得し、手順 3 から続けてください。

> **注意:** token は 1 回限りで、有効期間は約 120 秒です。取得後 60 秒以内の送信を推奨します。期限切れの token はサイトに受け付けられません。

## 方法 1：リクエストを直接送信する（推奨）

1.  ブラウザで一度通常どおり操作します。F12 で Network パネルを開き、キャプチャを完了してフォームを送信し、フォームを送信しているリクエストを探します。
2.  リクエストの Payload（または Form Data）から token を持つフィールドを探します。通常は `g-recaptcha-response` で、token は `03A` で始まります。サイトによっては `grecaptcharesponse` や `captcha` のように名前が変更されています。
3.  プログラムから同じリクエストを送り、そのフィールドの値を YesCaptcha が返した token に置き換えます。その他のフィールド、Cookie、リクエストヘッダーもブラウザのものと一致させてください。サイトは多くの場合、これらも同時に検査します。

Google のデモページを使った完全な例です。認識を行ってから、token を `g-recaptcha-response` フィールドでデモページに送り返します。

recaptcha_requests.py

```python
"""Solve reCAPTCHA v2 on Google's demo page and submit the token with plain HTTP (no browser).

Run:  pip install requests
      export YESCAPTCHA_CLIENT_KEY=your_client_key
      python recaptcha_requests.py
Each run creates one NoCaptchaTaskProxyless task (charged per the price list).
"""
import os
import time

import requests

CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]
API = "https://api.yescaptcha.com"
WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo"
WEBSITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"

def call(method, payload):
    data = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30).json()
    if data.get("errorId"):
        raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
    return data

def get_token():
    task = {"type": "NoCaptchaTaskProxyless", "websiteURL": WEBSITE_URL, "websiteKey": WEBSITE_KEY}
    task_id = call("createTask", {"task": task})["taskId"]
    for _ in range(36):  # poll every 5 seconds, for up to about 3 minutes
        time.sleep(5)
        result = call("getTaskResult", {"taskId": task_id})
        if result.get("status") == "ready":
            return result["solution"]["gRecaptchaResponse"]
    raise TimeoutError(task_id)

token = get_token()
print("token:", token[:40], "...")

# Submit the token the same way the browser does: the demo form posts the field
# "g-recaptcha-response" back to the page. Check your own site's request in DevTools > Network.
page = requests.post(WEBSITE_URL, data={"g-recaptcha-response": token}, timeout=30)
print("passed" if "Verification Success" in page.text else "not passed", page.status_code)
```

## 方法 2：ブラウザに入力する（Selenium など）

Selenium や Playwright などで実際のブラウザを操作する場合は、次の手順で行います。

1.  ページから `data-sitekey` を読み取り、それでタスクを作成して token を取得します。
2.  token をページ内の `g-recaptcha-response` テキストボックスに書き込みます。
3.  ページにコールバック関数（`data-callback="..."`）が設定されている場合は、token を渡して呼び出します。サイトによっては、コールバックを呼び出して初めて送信ボタンがクリック可能になります。
4.  フォームを送信します。

```js
// 第 2 步：写入 token（在页面里执行）
document.getElementById('g-recaptcha-response').value = 'TOKEN';
// 第 3 步：有回调函数时调用，例如 data-callback="onSuccess"
onSuccess('TOKEN');
```

ページに複数の reCAPTCHA がある場合、テキストボックスの id は `g-recaptcha-response-1` のようになっていることがあります。このテキストボックスが見つからないときは、まず手動で認証を一度完了し、Elements パネルで `03A` を検索して、結果がどこに置かれているかを確認してください。コールバック関数の見つけ方は [reCAPTCHA パラメータの調べ方](https://docs.yescaptcha.com/ja/guides/find-recaptcha-parameters.md) を参照してください。

完全な例（Selenium 4）：

recaptcha_selenium.py

```python
"""Solve reCAPTCHA v2 on Google's demo page in a real browser with Selenium 4:
get a token from YesCaptcha, put it into the page, then submit the form.

Run:  pip install requests selenium
      export YESCAPTCHA_CLIENT_KEY=your_client_key
      python recaptcha_selenium.py
Each run creates one NoCaptchaTaskProxyless task (charged per the price list).
"""
import os
import time

import requests
from selenium import webdriver
from selenium.webdriver.common.by import By

CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]
API = "https://api.yescaptcha.com"
WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo"

def call(method, payload):
    data = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30).json()
    if data.get("errorId"):
        raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
    return data

def get_token(website_url, website_key):
    task = {"type": "NoCaptchaTaskProxyless", "websiteURL": website_url, "websiteKey": website_key}
    task_id = call("createTask", {"task": task})["taskId"]
    for _ in range(36):
        time.sleep(5)
        result = call("getTaskResult", {"taskId": task_id})
        if result.get("status") == "ready":
            return result["solution"]["gRecaptchaResponse"]
    raise TimeoutError(task_id)

driver = webdriver.Chrome()  # Selenium 4 downloads a matching chromedriver automatically
try:
    driver.get(WEBSITE_URL)
    site_key = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-sitekey")
    token = get_token(WEBSITE_URL, site_key)

    # Put the token where reCAPTCHA keeps it ...
    driver.execute_script(
        "document.getElementById('g-recaptcha-response').value = arguments[0];", token
    )
    # ... and, if the page uses a callback (data-callback="..."), call it:
    callback = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-callback")
    if callback:
        driver.execute_script(f"window[{callback!r}](arguments[0]);", token)

    driver.find_element(By.ID, "recaptcha-demo-submit").click()
    time.sleep(2)
    print("passed" if "Verification Success" in driver.page_source else "not passed")
finally:
    driver.quit()
```

## reCAPTCHA v3

v3 にはチェックボックスがありません。ページは必要なときに `grecaptcha.execute(サイトキー, {action: '...'})` を呼び出して token を取得し、その token を自身のリクエストに含めます（フィールド名はサイトによって異なり、よくあるのは `g-recaptcha-response`、`token`、`recaptchaToken` です）。方法は方法 1 と同じです。Network パネルで token を含むリクエストを見つけ、その通りに送信します。タスク作成時の `pageAction` は、ページの `action` と一致させる必要があります。

## 送信しても通らない場合

-   token の期限切れ：取得後はできるだけ早く、60 秒以内に送信してください。
-   サイトが検査しているフィールドと違うフィールドに送信している、または他のフィールドや Cookie が欠けている：ブラウザのリクエストと項目ごとに照らし合わせてください。
-   サイトが IP や User-Agent なども同時に検査している：プロキシを自前で指定するタイプ（`NoCaptchaTask` など）を使い、送信時も同じプロキシを経由してください。
-   v3 のスコアが足りない：`pageAction` を確認するか、高スコア固定のタイプに切り替えてください。詳しくは [reCAPTCHA v3](https://docs.yescaptcha.com/ja/tasks/recaptcha-v3.md) を参照してください。
-   サイトのリスク制御がほかの行動シグナルも見ている：token 方式の通過率が低い場合は、[画像認識](https://docs.yescaptcha.com/ja/tasks/recaptcha-classification.md) を使ってブラウザで実際にクリックするか、[YesCaptcha Assistant（ブラウザ拡張機能）](https://docs.yescaptcha.com/ja/extension.md) を使ってください。
