Cloudflare Turnstile
Cloudflare Turnstile — современная альтернатива CAPTCHA от Cloudflare, ориентированная на приватность. Работает по аналогии с reCAPTCHA, но без отслеживания поведения пользователя. Turnstile отображается как виджет на формах и проверяет пользователя с минимальным взаимодействием — часто невидимо.
Обзор
Turnstile обычно встречается в двух видах:
- Отдельный виджет, встроенный непосредственно в форму сайта
- Cloudflare interstitial-страницы при DDoS-защите
- Три режима: Managed, Non-Interactive и Invisible
- Возвращает токен, который нужно отправить вместе с формой
Формат запроса
/in.phpkeystringобязателенВаш API-ключ (32 символа)
methodstringобязателенЗначение: turnstile
sitekeystringобязателенСайткей Turnstile со страницы (data-sitekey или вызов turnstile.render())
pageurlstringобязателенПолный URL-адрес, на котором отображается Turnstile
actionstringопциональноЗначение необязательного параметра action, которое вы нашли на странице, может быть определено в атрибуте data-action или передано в вызов turnstile.render
userAgentstringопциональноUser-Agent, передаваемая в браузер решателя. Рекомендуется для точности на защищённых сайтах
proxystringопциональноФормат: login:password@123.123.123.123:3128
proxytypestringопциональноТип прокси: HTTP, HTTPS, SOCKS4, SOCKS5
jsoninteger (0/1)по умолчанию: 0опционально0 — ответ текстом, 1 — ответ JSON
Как решать капчу
Шаг 1. Найдите сайткей
- Просмотрите код элемента на странице, где появляется Turnstile
- Найдите атрибут
data-sitekeyв div-элементе - Или найдите его в вызове
turnstile.render():
turnstile.render('#challengeContainer', {
sitekey: '3x00000000000000000000FF'
});Шаг 2. Отправьте задачу нам
curl -G "https://captcha-api.iwhat.pw/in.php" \
-d key=YOUR_API_KEY \
-d method=turnstile \
-d sitekey=3x00000000000000000000FF \
-d pageurl=https://example.com/page \
-d json=1import requests
params = {
'key': 'YOUR_API_KEY',
'method': 'turnstile',
'sitekey': '3x00000000000000000000FF',
'pageurl': 'https://example.com/page',
'json': '1'
}
response = requests.get('https://captcha-api.iwhat.pw/in.php', params=params)
result = response.json()
task_id = result['request']
print(f"ID задачи: {task_id}")const params = new URLSearchParams({
key: 'YOUR_API_KEY',
method: 'turnstile',
sitekey: '3x00000000000000000000FF',
pageurl: 'https://example.com/page',
json: '1',
});
const res = await fetch(`https://captcha-api.iwhat.pw/in.php?${params}`);
const { request: taskId } = await res.json();
console.log(`ID задачи: ${taskId}`);Шаг 3. Получение решения
import time
time.sleep(10)
params = {
'key': 'YOUR_API_KEY',
'action': 'get',
'id': task_id,
'json': '1'
}
response = requests.get('https://captcha-api.iwhat.pw/res.php', params=params)
result = response.json()
if result['status'] == 1:
token = result['request']
print(f"Токен решения: {token}")Шаг 4. Вставьте токен
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://example.com/page')
driver.execute_script(f'''
document.querySelector('[name="cf-turnstile-response"]').value = "{token}";
''')
driver.find_element_by_tag_name('form').submit()Формат ответа
JSON-ответ (при json=1):
{
"status": 1,
"request": "0.4uMMZZdSfsVM8...610cd090"
}Ответ в виде текста:
OK|0.4uMMZZdSfsVM8...610cd090Распространённые ошибки
| Код | Описание |
|---|---|
ERROR_WRONG_USER_KEY | Неверный формат API-ключа |
ERROR_KEY_DOES_NOT_EXIST | Такого API-ключа не существует |
ERROR_ZERO_BALANCE | Недостаточно средств на балансе |
ERROR_PAGEURL | Отсутствует параметр pageurl |
ERROR_WRONG_SITEKEY | sitekey пустой или в неверном формате |
ERROR_BAD_PROXY | Прокси помечен как нерабочий |
CAPCHA_NOT_READY | Решение ещё не готово, подождите 5 сек |
Советы и рекомендации
- Всегда используйте точный URL страницы, на которой появляется Turnstile — несовпадение URL может вызвать ошибки
- Используйте параметр
json=1для структурированных ответов, которые легче обрабатывать - Токены Turnstile одноразовые — запрашивайте новый токен для каждого вызова
- Указывайте прокси и
userAgentдля лучшей точности на защищённых сайтах