Cloudflare Turnstile выглядит как чекбокс, но это не CAPTCHA в старом смысле — решать обычно нечего. Он выполняет несколько сотен миллисекунд JavaScript в вашем браузере, оценивает, насколько настоящим выглядит этот браузер, и выдаёт токен. Если ваш скрапер не может убедительно выполнить этот JS, вы никогда не получите валидный токен, и каждый запрос, которому он нужен, возвращается челленджем.
Поэтому обычные приёмы скрапинга для Turnstile бесполезны. Ротация прокси, заголовки, даже идеальный TLS-отпечаток браузера — ничто не важно, если JavaScript-челлендж не выполняется. В этом руководстве — что именно измеряет Turnstile и реальные способы пройти его в 2026.
Turnstile — это «доказательство браузера», а не «доказательство человека». При загрузке виджет тихо прогоняет батарею проверок и сводит их в оценку:
requests, httpx, curl) вообще не может выдать токен.navigator.webdriver, артефакты CDP, отсутствующие или поддельные плагины и сигналы CDP/headless, которые остаются даже после патча очевидных флагов.Полученный токен привязан к вашему IP и короткому окну времени. Поэтому даже валидный токен, «одолженный» в другом месте, не сработает, если использовать его с другого выхода.
Прокси меняют ровно один из этих сигналов: репутацию IP. Это важно — чистый резидентный ASN может поднять пограничную оценку за черту — но токен они не создадут. Если вы бьёте по Turnstile HTTP-клиентом, прокси не помогут, потому что нет браузера для запуска челленджа. Прокси необходимы, но недостаточны.
Самый надёжный путь — реально выполнить челлендж в настоящем, хорошо замаскированном браузере: Playwright или Puppeteer с антидетект-патчами, или stealth-браузер. Токен генерируется естественно, на вашем IP, в реальном окружении:
from playwright.sync_api import sync_playwright
proxy = {"server": "socks5h://us.jibaoproxy.com:913",
"username": "USERNAME", "password": "PASSWORD"}
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, proxy=proxy)
page = browser.new_page()
page.goto("https://target.site")
page.wait_for_timeout(4000) # let Turnstile run and settle
# the cf token is now in the form; submit / read it as the site expects
token = page.eval_on_selector(
"input[name='cf-turnstile-response']", "el => el.value")
print("token:", token[:20], "...")
browser.close()
Запускайте headful (или настоящую headless-сборку), держите окружение браузера согласованным и пускайте через резидентный выход, чтобы оценка IP совпадала с оценкой браузера. Они должны совпадать — идеальный браузер на серверном IP всё равно получает низкую оценку.
Сервисы вроде 2Captcha, CapSolver и других прогонят челлендж за вас и вернут токен по API. Они полезны на масштабе, но с двумя подвохами:
Turnstile обычно работает в неинтерактивном «managed»-режиме: если оценка достаточна, он выдаёт токен без чекбокса и трения. Самый дешёвый «обход» — просто выглядеть достаточно настоящим, чтобы вас не челленджили: чистый отпечаток браузера плюс резидентный IP с хорошей репутацией ASN. Поднимите оценку выше порога — и Turnstile молча пропустит.
navigator.webdriver и следы CDP, иначе оценка низкая.Новым пользователям — 5U при регистрации, бонус к первому пополнению. Акция ограничена по времени.