Туториалы по API

Как решить reCAPTCHA v2 через API: пошаговое руководство

reCAPTCHA v2 — по-прежнему один из самых распространённых барьеров на формах логина, регистрации, чекаута и отправки данных. Если ваш сценарий автоматизации натыкается на чекбокс или картиночное задание reCAPTCHA v2, его можно решить через API за четыре шага: извлечь со страницы sitekey и pageurl, отправить их в решатель reCAPTCHA v2, дождаться результата и подставить полученный токен в защищённый запрос.

Это руководство — для разработчиков, которым нужна работающая интеграция, а не обзорная теория.

Не уверены, какая у вас версия reCAPTCHA? Сначала прочитайте Как определить версию reCAPTCHA.


Что нужно перед стартом

Требование Описание
API-ключ CaptchaAI Получите на captchaai.com/api.php, 32-символьная строка.
URL страницы Полный адрес, на котором загружается виджет reCAPTCHA v2.
sitekey Публичный ключ конкретного экземпляра виджета.
HTTP-клиент requests, axios, fetch, curl — что угодно.
Активные потоки На счёте должны быть свободные потоки решений.

Шаг 1: извлеките sitekey и pageurl

pageurl — это URL страницы, на которой стоит reCAPTCHA. Его задавайте полностью, со схемой https://.

sitekey найти можно одним из трёх способов:

1. В разметке — найдите <div class="g-recaptcha" data-sitekey="...">:

<div class="g-recaptcha" data-sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"></div>

2. В URL iframehttps://www.google.com/recaptcha/api2/anchor?ar=1&k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&... — параметр k= и есть sitekey.

3. В сетевом трафике — откройте DevTools → Network, отфильтруйте по recaptcha и в любом запросе найдёте параметр k.


Шаг 2: отправьте задачу

import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://https://staging.example.com/qa-login"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": SITEKEY,
    "pageurl": PAGEURL,
    "json": 1,
}).json()

assert submit["status"] == 1, submit
task_id = submit["request"]
print("task id:", task_id)

Эквивалент на Node.js:

const r = await fetch("https://ocr.captchaai.com/in.php", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    key: API_KEY,
    method: "userrecaptcha",
    googlekey: SITEKEY,
    pageurl: PAGEURL,
    json: "1",
  }),
});
const { status, request: taskId } = await r.json();
if (status !== 1) throw new Error(taskId);

Невидимая reCAPTCHA? Добавьте параметр invisible=1. Подробнее в Как работает невидимая reCAPTCHA.


Шаг 3: опросите результат

reCAPTCHA v2 решается обычно за 15–60 секунд. Подождите 20 секунд, затем опрашивайте каждые 5.

import time

time.sleep(20)
while True:
    res = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if res.get("request") == "CAPCHA_NOT_READY":
        time.sleep(5)
        continue

    if res.get("status") == 1:
        token = res["request"]
        print("token:", token[:60], "…")
        break

    raise RuntimeError(res)

Возвращённый токен — это длинная строка, начинающаяся обычно с 03AGdBq25....


Шаг 4: подставьте токен на страницу

Способ зависит от того, как сайт принимает решение. Чаще всего — текстовое поле g-recaptcha-response:

document.querySelector('textarea[name="g-recaptcha-response"]').value = token;
document.querySelector("form").submit();

В Selenium:

driver.execute_script(
    "document.querySelector('[name=\"g-recaptcha-response\"]').value = arguments[0];",
    token,
)
driver.find_element(By.CSS_SELECTOR, "form").submit()

В Playwright:

await page.evaluate((t) => {
  document.querySelector('[name="g-recaptcha-response"]').value = t;
}, token);
await page.click('button[type="submit"]');

Если у виджета есть data-callback, сначала вызовите эту функцию:

const callback = document.querySelector(".g-recaptcha").dataset.callback;
if (callback && window[callback]) window[callback](token);

Полный рабочий пример (Python)

import time
import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://https://staging.example.com/qa-login"

def solve_recaptcha_v2():
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": SITEKEY, "pageurl": PAGEURL, "json": 1,
    }).json()
    if submit["status"] != 1:
        raise RuntimeError(submit)
    task_id = submit["request"]

    time.sleep(20)
    for _ in range(40):
        res = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id, "json": 1,
        }).json()
        if res.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue
        if res.get("status") == 1:
            return res["request"]
        raise RuntimeError(res)
    raise TimeoutError("solve timed out")

if __name__ == "__main__":
    token = solve_recaptcha_v2()
    print("token:", token[:80])

Частые ошибки и как их исправить

Ошибка Причина Что делать
ERROR_GOOGLEKEY sitekey пуст или неверен Извлеките sitekey ещё раз из текущей страницы
ERROR_PAGEURL Не указан pageurl Передайте полный URL со схемой
ERROR_ZERO_BALANCE Нет потоков Пополните счёт или подождите
ERROR_CAPTCHA_UNSOLVABLE Сайт усложнил задание Повторите через несколько секунд; см. распространённые ошибки решения reCAPTCHA v2
Сайт отвергает токен Токен «протух» Используйте токен в течение ~110 секунд после получения

Когда что-то не работает

  • Токен возвращается, а сайт всё равно блокирует — у формы свой обработчик. Найдите имя callback'а и вызовите его, не подставляя поле напрямую.
  • Используйте ту же конфигурацию QA-сеанса — отправляйте те же User-Agent и cookies, что использовались при получении токена.
  • Прокси-зависимая reCAPTCHA — добавьте параметры proxy и proxytype в запрос, чтобы решатель использовал ваш IP-пул.

Дальше

  • Решение Cloudflare Turnstile через API
  • Решение GeeTest v3 через API
  • Быстрый старт CaptchaAI

Получите ключ на captchaai.com/api.php и подключите решение reCAPTCHA v2 за один спринт.

Комментарии для этой статьи отключены.