# Использование токена reCAPTCHA

> Что делать с токеном reCAPTCHA (gRecaptchaResponse): принцип работы, отправка обычным HTTP-запросом (поле g-recaptcha-response), подстановка в страницу в браузере с вызовом callback-функции, а также полный пример на Python для демо-страницы Google.

Source: https://docs.yescaptcha.com/ru/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/

`gRecaptchaResponse`, который возвращает YesCaptcha, — это то самое значение, которое Google передаёт странице после прохождения капчи. Получив его, нужно **отправить его на целевой сайт** (не в Google и не в YesCaptcha) так же, как это делает браузер: сайт проверяет токен через Google и пропускает вас. Есть два способа: отправить запрос самостоятельно или подставить токен в страницу в реальном браузере и отправить форму.

## Принцип работы

При обычном посещении:

1.  Страница загружает reCAPTCHA, пользователь проходит проверку;
2.  Google выдаёт странице токен, а страница помещает его в поле `g-recaptcha-response` (или передаёт в callback-функцию);
3.  Пользователь отправляет форму, и токен уходит на сервер сайта вместе с ней;
4.  Сервер сайта проверяет токен через Google и, если проверка успешна, пропускает пользователя.

При работе с YesCaptcha шаги 1 и 2 выполняем мы: вы создаёте задачу с `websiteURL` и `websiteKey`, получаете токен и продолжаете с шага 3.

> **Осторожно:** Токен одноразовый и действует около 120 секунд; отправляйте его в течение 60 секунд после получения. Просроченные токены сайт не принимает.

## Способ 1: отправить запрос самостоятельно (рекомендуется)

1.  Один раз выполните действие вручную в браузере: откройте панель Network (F12), пройдите капчу, отправьте форму и найдите запрос, который отправляет форму.
2.  В Payload (или Form Data) запроса найдите поле с токеном — обычно оно называется `g-recaptcha-response`, а токен начинается с `03A`. Некоторые сайты переименовывают поле, например в `grecaptcharesponse` или `captcha`.
3.  Отправьте из своей программы такой же запрос, подставив в это поле токен, полученный от YesCaptcha. Остальные поля, Cookie и заголовки тоже должны совпадать с браузерными: сайты часто проверяют и их.

Полный пример на демо-странице Google: сначала получаем токен, затем отправляем его обратно на демо-страницу в поле `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` со страницы и создайте задачу, чтобы получить токен.
2.  Запишите токен в текстовое поле `g-recaptcha-response` на странице.
3.  Если на странице задана callback-функция (`data-callback="..."`), вызовите её, передав токен; на некоторых сайтах кнопка отправки становится активной только после вызова callback.
4.  Отправьте форму.

```js
// Step 2: write the token (run in the page)
document.getElementById('g-recaptcha-response').value = 'TOKEN';
// Step 3: call the callback if there is one, e.g. data-callback="onSuccess"
onSuccess('TOKEN');
```

Если на странице несколько reCAPTCHA, id поля может выглядеть как `g-recaptcha-response-1`. Если поле не находится, один раз пройдите капчу вручную и найдите `03A` в панели Elements — так вы увидите, где сохраняется результат. Как найти callback-функцию, описано в разделе [Поиск параметров reCAPTCHA](https://docs.yescaptcha.com/ru/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: '...'})`, когда ей нужен токен, и помещает его в собственный запрос (имя поля определяет сайт; чаще всего это `g-recaptcha-response`, `token` или `recaptchaToken`). Действуйте как в способе 1: найдите в панели Network запрос с токеном и воспроизведите его. При создании задачи `pageAction` должен совпадать с `action` на странице.

## Токен отправлен, но проверка не проходит

-   Токен просрочен: отправляйте его сразу после получения, не позже чем через 60 секунд.
-   Вы отправили не то поле, которое проверяет сайт, или пропустили другие поля и Cookie: сверьте запрос с браузерным по каждому полю.
-   Сайт также проверяет IP, User-Agent и т. п.: используйте тип со своим прокси (например, `NoCaptchaTask`) и отправляйте токен через тот же прокси.
-   Низкий скор в v3: проверьте `pageAction` или используйте тип с фиксированным высоким скором, см. [reCAPTCHA v3](https://docs.yescaptcha.com/ru/tasks/recaptcha-v3.md).
-   Защита сайта учитывает и другие поведенческие сигналы. Если токены проходят редко, перейдите на [распознавание изображений](https://docs.yescaptcha.com/ru/tasks/recaptcha-classification.md) и кликайте в реальном браузере либо используйте [расширение браузера](https://docs.yescaptcha.com/ru/extension.md).
