コンテンツにスキップ
ステータスダッシュボード

ガイド

token で reCAPTCHA を通過する

このページは中国語版から機械翻訳されたもので、不正確な箇所がある可能性があります。中国語版を正としてください。

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 から続けてください。

方法 1:リクエストを直接送信する(推奨)

Section titled “方法 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
"""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 など)

Section titled “方法 2:ブラウザに入力する(Selenium など)”

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

  1. ページから data-sitekey を読み取り、それでタスクを作成して token を取得します。
  2. token をページ内の g-recaptcha-response テキストボックスに書き込みます。
  3. ページにコールバック関数(data-callback="...")が設定されている場合は、token を渡して呼び出します。サイトによっては、コールバックを呼び出して初めて送信ボタンがクリック可能になります。
  4. フォームを送信します。
// 第 2 步:写入 token(在页面里执行)
document.getElementById('g-recaptcha-response').value = 'TOKEN';
// 第 3 步:有回调函数时调用,例如 data-callback="onSuccess"
onSuccess('TOKEN');

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

完全な例(Selenium 4):

recaptcha_selenium.py
"""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()

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 を参照してください。
  • サイトのリスク制御がほかの行動シグナルも見ている:token 方式の通過率が低い場合は、画像認識 を使ってブラウザで実際にクリックするか、YesCaptcha Assistant(ブラウザ拡張機能) を使ってください。