Scarnox · Blog

Как работает reCAPTCHA v2 и как ее решать (скоро)

reCAPTCHA v2 — классическая капча Google. Она показывает чекбокс с надписью «Я не робот» и, когда не уверена в посетителе, добавляет задание с картинками. Решателю для нее нужно получить валидный токен ответа, который сайт может проверить у Google. Поддержка reCAPTCHA v2 в Scarnox скоро появится. Это руководство объясняет, как работает виджет, какие общие подходы используют люди сегодня и чего ожидать от решателя на основе токенов.

Scarnox пока не решает reCAPTCHA v2 в режиме онлайн. Единственный живой тип задачи сегодня — PopularCaptcha без прокси. Если вашему проекту нужна reCAPTCHA v2 прямо сейчас, описанные ниже подходы — реалистичные варианты.

Как работает виджет

Страница встраивает контейнер с атрибутом data-sitekey. Этот sitekey идентифицирует сайт для Google. Когда виджет загружается, он выполняет проверки в браузере, смотрит на поведение посетителя, cookie и историю, и отправляет оценку риска в Google.

Если оценка показывает низкий риск, чекбокс отмечается сам, а виджет записывает токен в скрытое поле g-recaptcha-response. Если риск выше, посетитель видит задание с картинками, например выбор плиток с определенным объектом. Успешное прохождение задания тоже записывает токен.

Серверная часть сайта затем отправляет токен в конечную точку проверки Google вместе с секретным ключом сайта. Google отвечает успехом или неудачей. Поскольку проверка происходит на сервере, форма, которая принимает токен без проверки у Google, фактически не защищена reCAPTCHA.

Почему запрос помечается

Чекбокс — это решение о риске, а не головоломка. Обычные триггеры:

Понимание этих триггеров важнее самого виджета. Если ваш трафик не вызывает чекбокс, вы никогда не увидите задание с картинками.

Общие подходы, которые работают сегодня

Эти подходы широко используются и честны. Они снижают частоту появления задания в законной работе.

  1. Держите настоящие сессии. Переиспользуйте cookie и согласованный профиль браузера в течение сессии, а не начинайте заново на каждой странице.
  2. Соблюдайте паузы. Устойчивый, медленный темп выглядит гораздо больше как человек, чем всплеск.
  3. Используйте настоящий браузер для виджета. Полноценный браузер с обычными настройками реже помечается, чем урезанная headless-настройка. Руководство по обнаружению headless-браузера перечисляет распространенные сигналы.
  4. Попросите исключение или тестовый ключ. Если сайт ваш, используйте опубликованные Google тестовые ключи на стейджинге. Если нет, попросите владельца добавить вас в список разрешенных.
  5. Подключите человека. Для задач с малым объемом человек может отметить чекбокс и передать токен дальше. Это медленно, но надежно.

Эти подходы не гарантируют, что задание никогда не появится. Они снижают частоту, а это то, что поддерживает стабильность законной работы.

Что сделает решатель на основе токенов

Решатель reCAPTCHA v2 на основе токенов делает то же, что PopularCaptcha делает сегодня. Он берет sitekey и URL страницы, производит валидный токен g-recaptcha-response и возвращает его вашему коду. Затем ваш код вставляет токен в форму и отправляет ее до истечения срока токена.

Scarnox опишет тип задачи и дополнительные поля в справочнике API, когда появится поддержка reCAPTCHA v2. До тех пор не создавайте код на основе предполагаемого интерфейса. Структура запроса будет похожа на пример с PopularCaptcha, но точные значения сверяйте с документацией.

Чек-лист для задачи с reCAPTCHA v2

Когда планируете задачу с формой reCAPTCHA v2, проверьте следующие пункты:

Частые ошибки

Самая частая проблема в интеграции reCAPTCHA v2 — токен, который сайт отклоняет, хотя выглядит правильно. За большинством таких случаев стоят три причины. Первая — несовпадение sitekey и URL страницы: токен привязан к странице, где показали виджет, поэтому sitekey, взятый с одной страницы и отправленный на другую, не сработает. Вторая — устаревший токен. Токены живут недолго, поэтому скрипт, который решает сначала, а потом выполняет длинную последовательность других шагов, отправит истекшее значение. Третья — отсутствие серверной проверки с вашей стороны. Если ваши тесты только подтверждают наличие токена, вы не заметите, что шаг проверки падает.

Вторая группа ошибок возникает из-за рабочего процесса вокруг виджета. Частая ошибка — войти в одной сессии, а форму отправить из другой, потому что проверка может зависеть от сессии, которая загрузила виджет. Также повторная отправка отклоненной формы много раз подряд делает сессию подозрительной, и одно задание может превратиться в серию. Когда что-то падает, сделайте паузу, проверьте состояние страницы и попробуйте еще раз со свежими значениями.

Ответственный парсинг

Если форма входит в задачу парсинга, проверьте robots.txt и условия сайта перед началом. Держите низкую частоту и не собирайте персональные данные, которые вам не нужны. Руководство о законности парсинга описывает основные соображения.

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