Результат решения 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 — нет.
Как работает решение через токен
Схема одинакова для всех токеновых типов, меняется имя поля:
- Прочитать sitekey из исходного кода страницы.
- Отправить sitekey и URL страницы в CaptchaAI.
- Опрашивать
res.phpдо появления готового токена. - Подставить токен в скрытое поле формы.
- Отправить форму обычным HTTP-запросом.
Куда именно попадает строка, зависит от типа проверки: reCAPTCHA v2 ждёт токен в текстовой области g-recaptcha-response, reCAPTCHA v3 использует то же поле, но дополнительно требует параметр action (и enterprise=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 и одно к целевой форме, а проверку валидности выполняет сам сайт. Если между получением токена и отправкой стоит очередь или повторная попытка с задержкой, токен успеет истечь — отправляйте сразу после решения.
Как работает решение через cookie
Здесь порядок другой, и первый шаг выполняет полноценный браузер:
- Сервер отдаёт страницу проверки вместо запрошенного контента.
- Браузер проходит проверку — внутри может использоваться тот же Cloudflare Turnstile.
- Сервер устанавливает cookie сессии (
qa_validation_cookie). - Все последующие запросы с этим 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 логично хранить рядом с прокси и обновлять по таймеру, а не после первой ошибки.
Гибридный сценарий: 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-ФЗ не исчезают оттого, что проверка пройдена автоматически.
Частые вопросы
Можно ли превратить токен в cookie или наоборот?
Нет. Формат результата задаёт сторона сайта: reCAPTCHA проверяет токен, страница проверки Cloudflare ставит cookie. Код подстраивается под механизм, а не наоборот.
Что дешевле при сборе больших объёмов данных?
Cookie, если сайт его использует: одно решение покрывает тысячи запросов, тогда как токен нужен на каждую отправку формы. При тарификации по потокам это ещё и разгружает параллелизм: одновременных задач в работе заметно меньше.
Почему cookie перестал работать после переезда на другой сервер?
Скорее всего, изменился выходной IP-адрес или User-Agent. Cookie привязан к паре «адрес + User-Agent», под которой был получен, поэтому забирать его нужно заново — с того прокси, откуда пойдут запросы.
Что делать, если токен истекает раньше отправки формы?
Сократите путь между решением и отправкой: запрашивайте токен непосредственно перед POST-запросом и не кладите его в очередь. Ориентир — окно 60–120 секунд.
Нужен ли headless-браузер, если сайт отдаёт только токен?
Нет. Браузер нужен один раз — прочитать sitekey; дальше хватает обычной requests-сессии. Полноценный браузер обязателен только там, где проверка завершается установкой cookie.
С чего начать
Получите API-ключ на captchaai.com и начните с токенового сценария: он проще в отладке.