YesCaptcha が返す gRecaptchaResponse は、ページ上でキャプチャを完了したときに Google がページへ渡す結果と同じものです。取得したら、ブラウザと同じように対象のウェブサイトへ送信する必要があります(Google や YesCaptcha には送信しません)。サイトはそれを Google に照会して検証し、通過させます。方法は 2 つあります。リクエストを直接送信する方法と、ブラウザのページに入力して送信する方法です。
通常のアクセスでは、次の流れになります。
- ページが reCAPTCHA を読み込み、ユーザーが認証を完了する。
- Google がページに token を渡し、ページがそれを
g-recaptcha-responseテキストボックスに入れる(またはコールバック関数に渡す)。 - ユーザーがフォームを送信すると、token もフォームと一緒にサイトのサーバーへ送られる。
- サイトのサーバーが token を Google に照会して検証し、問題なければ通過させる。
YesCaptcha を使う場合、手順 1 と 2 は YesCaptcha が行います。websiteURL と websiteKey でタスクを作成して token を取得し、手順 3 から続けてください。
方法 1:リクエストを直接送信する(推奨)
Section titled “方法 1:リクエストを直接送信する(推奨)”- ブラウザで一度通常どおり操作します。F12 で Network パネルを開き、キャプチャを完了してフォームを送信し、フォームを送信しているリクエストを探します。
- リクエストの Payload(または Form Data)から token を持つフィールドを探します。通常は
g-recaptcha-responseで、token は03Aで始まります。サイトによってはgrecaptcharesponseやcaptchaのように名前が変更されています。 - プログラムから同じリクエストを送り、そのフィールドの値を YesCaptcha が返した token に置き換えます。その他のフィールド、Cookie、リクエストヘッダーもブラウザのものと一致させてください。サイトは多くの場合、これらも同時に検査します。
Google のデモページを使った完全な例です。認識を行ってから、token を g-recaptcha-response フィールドでデモページに送り返します。
"""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.pyEach run creates one NoCaptchaTaskProxyless task (charged per the price list)."""import osimport 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 などで実際のブラウザを操作する場合は、次の手順で行います。
- ページから
data-sitekeyを読み取り、それでタスクを作成して token を取得します。 - token をページ内の
g-recaptcha-responseテキストボックスに書き込みます。 - ページにコールバック関数(
data-callback="...")が設定されている場合は、token を渡して呼び出します。サイトによっては、コールバックを呼び出して初めて送信ボタンがクリック可能になります。 - フォームを送信します。
// 第 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):
"""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.pyEach run creates one NoCaptchaTaskProxyless task (charged per the price list)."""import osimport time
import requestsfrom selenium import webdriverfrom 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 automaticallytry: 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
Section titled “reCAPTCHA v3”v3 にはチェックボックスがありません。ページは必要なときに grecaptcha.execute(サイトキー, {action: '...'}) を呼び出して token を取得し、その token を自身のリクエストに含めます(フィールド名はサイトによって異なり、よくあるのは g-recaptcha-response、token、recaptchaToken です)。方法は方法 1 と同じです。Network パネルで token を含むリクエストを見つけ、その通りに送信します。タスク作成時の pageAction は、ページの action と一致させる必要があります。
送信しても通らない場合
Section titled “送信しても通らない場合”- token の期限切れ:取得後はできるだけ早く、60 秒以内に送信してください。
- サイトが検査しているフィールドと違うフィールドに送信している、または他のフィールドや Cookie が欠けている:ブラウザのリクエストと項目ごとに照らし合わせてください。
- サイトが IP や User-Agent なども同時に検査している:プロキシを自前で指定するタイプ(
NoCaptchaTaskなど)を使い、送信時も同じプロキシを経由してください。 - v3 のスコアが足りない:
pageActionを確認するか、高スコア固定のタイプに切り替えてください。詳しくは reCAPTCHA v3 を参照してください。 - サイトのリスク制御がほかの行動シグナルも見ている:token 方式の通過率が低い場合は、画像認識 を使ってブラウザで実際にクリックするか、YesCaptcha Assistant(ブラウザ拡張機能) を使ってください。