Explainers

Локализация CAPTCHA: как языковые настройки влияют на проблемы

Нужно ли передавать язык сайта в CaptchaAI, чтобы решить reCAPTCHA или Turnstile? Нет — интерфейс виджета может быть на любом языке, результат не изменится. А вот для CAPTCHA-изображений язык критичен: неверный параметр language вернёт набор символов, который не совпадёт с картинкой, и токен не пройдёт проверку на сайте. Ниже — что именно локализуется в каждом типе CAPTCHA и как настроить парсер под нужную локаль.

Что это меняет при решении

CAPTCHA на основе токена (reCAPTCHA, Turnstile, GeeTest v3)

Языковые настройки влияют на интерфейс, но не на токен. Решение в CaptchaAI не зависит от языка: вы отправляете sitekey и URL страницы, CaptchaAI возвращает валидный токен, и он действителен вне зависимости от того, на каком языке отображался виджет. Языковой параметр в запрос к CaptchaAI для этих типов передавать не нужно.

hCaptcha локализуется по той же логике (меняется текст задания, sitekey — нет), но CaptchaAI пока не решает hCaptcha — это справочная информация для сравнения провайдеров, а не инструкция по вызову API.

CAPTCHA-изображение

Здесь язык напрямую определяет символы на картинке, а значит и правильный параметр language:

Язык сайта Содержимое CAPTCHA Параметр language в CaptchaAI
Английский «Введите текст: XKCD42» 0 (по умолчанию / латиница)
Русский «Введите текст: ШКАФ» 1 (кириллица) или 2
Китайский «请输入验证码: 汉字» 2 (нелатинские символы)
Арабский «أدخل النص: عربي» 2 (нелатинские символы)
Японский «文字を入力: ひらがな» 2 (нелатинские символы)

Аудио-CAPTCHA

Аудио-испытания reCAPTCHA озвучиваются на языке из параметра hl или заголовка Accept-Language. CaptchaAI решает их тем же стандартным потоком, что и обычную reCAPTCHA, — метод решения от языка аудио не зависит.

Как провайдер узнаёт язык посетителя

Провайдеры CAPTCHA определяют язык по нескольким независимым сигналам, и они не всегда совпадают друг с другом.

Заголовок Accept-Language

Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7

Это говорит серверу: сначала японский (Япония), затем английский (США), затем английский без региона. reCAPTCHA и Turnstile используют этот заголовок для выбора языка интерфейса.

HTML-параметр hl

reCAPTCHA принимает явный языковой параметр прямо при загрузке скрипта:

<!-- Force English reCAPTCHA -->
<script src="https://www.google.com/recaptcha/api.js?hl=en"></script>

<!-- Force Japanese -->
<script src="https://www.google.com/recaptcha/api.js?hl=ja"></script>

Параметр hl перекрывает заголовок Accept-Language. Для решения совпадение не требуется — CaptchaAI возвращает токен независимо от языка интерфейса.

Гео-IP

Часть конфигураций CAPTCHA завязана на регион запроса, а не только на заголовки браузера:

  • IP из Китая — сайт может отдать GeeTest вместо reCAPTCHA (reCAPTCHA в Китае заблокирована на уровне сети).
  • IP из ЕС — перед CAPTCHA может показаться баннер согласия по GDPR.
  • IP из региона с повышенным риском — испытание может оказаться сложнее обычного при том же sitekey.

CAPTCHA на JavaScript считывает язык из объекта браузера:

navigator.language       // "en-US"
navigator.languages      // ["en-US", "en", "ja"]

В headless-браузерах по умолчанию используется системная локаль хоста, а не локаль целевого сайта. Задавайте её явно:

// Playwright
const context = await browser.newContext({
  locale: 'ja-JP',
});

// Puppeteer
const page = await browser.newPage();
await page.setExtraHTTPHeaders({
  'Accept-Language': 'ja-JP,ja;q=0.9',
});

Сводка: что локализуется, а что нет

  • reCAPTCHA — локализует текст интерфейса, подписи к изображениям и язык аудио; sitekey, поток проверки и формат токена не меняются.
  • Cloudflare Turnstile — локализует текст виджета и сообщения об ошибках; sitekey и формат токена остаются прежними.
  • hCaptcha — локализует инструкции к заданиям и подписи категорий; sitekey и формат токена не меняются.
  • Изображение/OCR — меняются набор символов и язык текста; формат изображения и поток submit/poll — нет.

Пример: кириллические формы на порталах СНГ

Если парсер работает с формами на русскоязычных порталах — бронирование, личные кабинеты в РФ, Беларуси, Казахстане, — сайт обычно сразу показывает CAPTCHA-изображение с кириллическими символами, а не транслитом. Задайте CaptchaAI language=1 (кириллица) вместо общего language=2 — меньше повторных попыток на буквах вроде «Ш», «Щ», «Ъ». Если инфраструктура развёрнута в Европе или Казахстане, а цель — в РФ, заложите запас по таймауту: сеть до цели из удалённого дата-центра часто добавляет 150–300 мс на запрос, и это заметно при большом числе параллельных потоков.

Типичные проблемы с локализацией

Если парсер отправляет Accept-Language: en-US на японский сайт, CAPTCHA может отрисоваться на английском — для CAPTCHA на основе токена это не проблема, но может насторожить сайт, если он сверяет согласованность языковых сигналов между собой. Кроме того, в разных регионах реально используются разные провайдеры CAPTCHA:

  • Западные рынки — reCAPTCHA, Cloudflare Turnstile, hCaptcha.
  • Китай — GeeTest, Tencent CAPTCHA, собственные изображения.
  • Россия / СНГ — CAPTCHA-изображения собственной разработки, reCAPTCHA.
  • Южная Корея — собственные слайдеры, CAPTCHA-изображения.

Поиск неисправностей

  • reCAPTCHA показывается не на том языке — параметр hl в теге скрипта расходится с заголовком Accept-Language; не критично, токен от языка интерфейса не зависит.
  • CAPTCHA-изображение распознано с ошибками — параметр language не совпадает со скриптом на картинке; для нелатинских символов ставьте language=2, для кириллицы — language=1.
  • Сайт по региону отдаёт другой тип CAPTCHA — выбор провайдера идёт по гео-IP; используйте прокси, соответствующий целевому региону.
  • Headless-браузер показывает не ту локаль — по умолчанию берётся системная локаль хоста; задайте locale явно в контексте браузера.
  • Аудио-CAPTCHA звучит не на том языке — параметр hl перекрывает заголовок; на решение через CaptchaAI это не влияет.

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

Какой параметр language выбрать для CAPTCHA-изображения с кириллицей или иероглифами?

Для кириллицы обычно достаточно language=1. Для китайского, японского, арабского и других нелатинских наборов используйте language=2. Значение 0 оставляйте только для латиницы по умолчанию.

Может ли один и тот же sitekey отдавать испытание разной сложности в зависимости от региона?

Да. Провайдеры CAPTCHA нередко подстраивают сложность под региональный риск-скор: трафик из отдельных регионов получает более строгие испытания при том же sitekey. На решение через CaptchaAI это не влияет — API обрабатывает испытания любой сложности.

Стоит ли синхронизировать Accept-Language прокси с языком целевого сайта?

Для консистентности — да, это хорошая практика: часть сайтов сверяет заголовки языка с другими сигналами и может насторожиться при расхождении. На сам процесс решения в CaptchaAI это не влияет.

Почему сайты в Китае показывают GeeTest вместо reCAPTCHA?

reCAPTCHA заблокирована в Китае на уровне сети, поэтому сайты, ориентированные на китайский трафик, по умолчанию переключаются на GeeTest или собственные CAPTCHA-виджеты ещё до того, как решают, показывать ли капчу вообще.

Влияет ли локаль браузера на скорость решения в CaptchaAI?

Нет. Скорость решения определяется типом CAPTCHA и текущей нагрузкой, а не языком интерфейса или содержимым запроса Accept-Language.

Следующие шаги

Начните с быстрого старта, а затем переходите к пошаговым руководствам по конкретным типам CAPTCHA:

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