Comparisons

Решение CAPTCHA на основе токенов и файлов cookie

Результат решения CAPTCHA приходит в одном из двух видов: короткая строка-токен, которую вы кладёте в поле формы, либо cookie сессии, открывающий доступ ко всем последующим запросам. Выбирать между ними не приходится — вид результата задаёт сама защита на целевой странице, а задача разработчика в том, чтобы правильно построить вокруг него код.

Разница при этом огромная. Токен — расходник: живёт 60–120 секунд, срабатывает один раз и требует нового решения на каждую отправку формы. Cookie — пропуск: одно решение окупается сотнями запросов, но привязано к IP-адресу и User-Agent, с которых было получено.

Что выбрать под вашу задачу

  • Форма входа с reCAPTCHA v2 — токен, отправляется вместе с данными формы.
  • Отправка формы за Cloudflare Turnstile — токен в поле cf-turnstile-response.
  • Парсинг сайта за проверкой Cloudflare — cookie: одно решение, много страниц.
  • Обращение к API за той же проверкой — cookie, переиспользуемый во всех вызовах.
  • Пакетная отправка нескольких форм — токен, каждый раз новый.
  • Массовый сбор данных с одного домена — cookie, до истечения срока действия.

Сводная таблица различий

Аспект Токен Cookie сессии
Что возвращается строка длиной 500+ символов cookie браузера (qa_validation_cookie и подобные)
Где применяется reCAPTCHA v2/v3, Cloudflare Turnstile страницы проверки Cloudflare, JS Challenge
Куда подставляется поле формы или тело POST-запроса последующие HTTP-запросы
Срок жизни 60–120 секунд от 30 мин до 24 часов
Повторное использование нет, одноразовый да, в пределах сессии
Нужен ли браузер только для чтения sitekey да, для самого решения
Привязка к IP нет, работает с любого адреса да, к адресу решения
Стоимость на объёме решение на каждую отправку решение амортизируется на сессию

Отдельного внимания заслуживает строка о привязке к IP: именно она чаще всего ломает распределённые пайплайны. Токен решается на одной машине и отправляется с другой, cookie — нет.

Как работает решение через токен

Схема одинакова для всех токеновых типов, меняется имя поля:

  1. Прочитать sitekey из исходного кода страницы.
  2. Отправить sitekey и URL страницы в CaptchaAI.
  3. Опрашивать res.php до появления готового токена.
  4. Подставить токен в скрытое поле формы.
  5. Отправить форму обычным HTTP-запросом.

Куда именно попадает строка, зависит от типа проверки: reCAPTCHA v2 ждёт токен в текстовой области g-recaptcha-response, reCAPTCHA v3 использует то же поле, но дополнительно требует параметр actionenterprise=1 для Enterprise-сайткеев), Cloudflare Turnstile — поле cf-turnstile-response.

import requests
import time

API_KEY = "YOUR_API_KEY"

# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMR...",
    "pageurl": "https://staging.example.com/qa-login",
    "json": "1",
}).json()
task_id = resp["request"]

# 2. Poll
token = None
for _ in range(24):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": "1"
    }).json()
    if result["status"] == 1:
        token = result["request"]
        break

# 3. Submit form with token (no browser needed)
form_response = requests.post("https://staging.example.com/qa-login", data={
    "email": "[email protected]",
    "password": "password",
    "g-recaptcha-response": token,
})

Что важно в этом сценарии: браузер для отправки не нужен вовсе, весь цикл укладывается в два обращения к API и одно к целевой форме, а проверку валидности выполняет сам сайт. Если между получением токена и отправкой стоит очередь или повторная попытка с задержкой, токен успеет истечь — отправляйте сразу после решения.

Здесь порядок другой, и первый шаг выполняет полноценный браузер:

  1. Сервер отдаёт страницу проверки вместо запрошенного контента.
  2. Браузер проходит проверку — внутри может использоваться тот же Cloudflare Turnstile.
  3. Сервер устанавливает cookie сессии (qa_validation_cookie).
  4. Все последующие запросы с этим cookie идут напрямую.
from selenium import webdriver
import requests
import time

# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")

# Wait for challenge to complete (manually or with CaptchaAI)
time.sleep(10)  # Or use CaptchaAI передача токена во внутренний QA endpoint

# 2. Extract cookies from browser
cookies = driver.get_cookies()
qa_validation_cookie = next(
    (c for c in cookies if c["name"] == "qa_validation_cookie"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()

# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})

for cookie in cookies:
    session.cookies.set(cookie["name"], cookie["value"])

# All requests now pass the challenge
for page in range(1, 50):
    resp = session.get(f"https://example.com/api/data?page={page}")
    print(f"Page {page}: {resp.status_code}")

Свойства здесь ровно противоположны токеновым: cookie живёт от 30 мин до 24 часов и обслуживает много запросов, но привязан к IP-адресу и User-Agent, с которыми был получен. Скопируете его в воркер с другим выходным адресом — проверка вернётся. Поэтому cookie логично хранить рядом с прокси и обновлять по таймеру, а не после первой ошибки.

Реальные сайты нередко сочетают оба механизма: страница проверки Cloudflare (cookie) закрывает форму с reCAPTCHA (токен). Порядок строго последовательный — сначала сессия, потом токен, затем отправка.

# Step 1: Get past Cloudflare (cookie)
session = get_browser_validation_session("https://example.com")

# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)

# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")

# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
    "data": "value",
    "g-recaptcha-response": token,
})

Такой пайплайн удобно отлаживать на staging-копии своего сервиса: браузер поднимается один раз, дальше работает requests-сессия.

Сколько это стоит в потоках

CaptchaAI тарифицируется по числу одновременных потоков, а не по количеству решений: внутри тарифа решения не ограничены. Считать нужно не «сколько CAPTCHA в месяц», а «сколько решений одновременно висит в работе».

Сценарий команды Профиль нагрузки Ориентир по тарифу
Регрессионные QA-прогоны формы входа 3–5 параллельных решений токенов BASIC ($15/мес, 5 потоков)
Ночной сбор данных каталога через cookie одно решение на сессию BASIC ($15/мес, 5 потоков)
Агентство с 10–15 проектами смешанные токены и обновления cookie STANDARD ($30/мес, 15 потоков)
Постоянный конвейер парсинга десятки одновременных задач ADVANCE ($90/мес, 50 потоков)

Для команд в Москве, Минске, Алматы или Киеве, получающих выручку в местной валюте, предсказуемый месячный платёж в USD планируется проще: счёт не растёт вместе с трафиком. И про правовую сторону: если пайплайн собирает персональные данные, требования 152-ФЗ не исчезают оттого, что проверка пройдена автоматически.

Частые вопросы

Нет. Формат результата задаёт сторона сайта: reCAPTCHA проверяет токен, страница проверки Cloudflare ставит cookie. Код подстраивается под механизм, а не наоборот.

Что дешевле при сборе больших объёмов данных?

Cookie, если сайт его использует: одно решение покрывает тысячи запросов, тогда как токен нужен на каждую отправку формы. При тарификации по потокам это ещё и разгружает параллелизм: одновременных задач в работе заметно меньше.

Скорее всего, изменился выходной IP-адрес или User-Agent. Cookie привязан к паре «адрес + User-Agent», под которой был получен, поэтому забирать его нужно заново — с того прокси, откуда пойдут запросы.

Что делать, если токен истекает раньше отправки формы?

Сократите путь между решением и отправкой: запрашивайте токен непосредственно перед POST-запросом и не кладите его в очередь. Ориентир — окно 60–120 секунд.

Нужен ли headless-браузер, если сайт отдаёт только токен?

Нет. Браузер нужен один раз — прочитать sitekey; дальше хватает обычной requests-сессии. Полноценный браузер обязателен только там, где проверка завершается установкой cookie.

С чего начать

Получите API-ключ на captchaai.com и начните с токенового сценария: он проще в отладке.

Смежные материалы

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