Решаем невидимую PopularCaptcha: отличия и что отправлять
Невидимая PopularCaptcha выглядит как отсутствие капчи. Нет окошка «Я не робот». Сайт вызывает PopularCaptcha из собственного JavaScript, обычно в момент, когда посетитель нажимает отправку, и показывает задание, только если сомневается в посетителе. Для скрипта автоматизации виджет труднее заметить, но решение по-прежнему занимает один запрос.
Scarnox решает PopularCaptcha сегодня, в том числе невидимый вариант. Вы задаете один флаг, is_invisible, и отправляете тот же запрос, что и для видимого виджета. Другие типы капчи скоро появятся.
Как понять, что капча невидимая
- У виджета есть
data-size="invisible". - Сайт вызывает функцию
execute()виджета в собственном коде. - На странице есть sitekey, но нигде нет видимого чекбокса.
Решает настройка sitekey, а не внешний вид страницы. Если сомневаетесь, найдите sitekey и проверьте настройки виджета в JavaScript страницы.
Что отправлять
Используйте тот же эндпоинт и тот же тип задачи, добавив is_invisible со значением true:
{
"captcha_type": "PopularCaptchaTaskProxyless",
"site_key": "10000000-ffff-ffff-ffff-000000000001",
"site_url": "https://example.com/login",
"is_invisible": true
}
Отправляйте ключ в заголовке Authorization: Bearer, как и во всех остальных примерах. Вызов блокируется, пока токен не будет готов, без опроса. Используйте таймаут около 185 секунд.
Возврат токена на сайт
Интеграции с невидимыми виджетами почти всегда используют callback, а не поле формы. Сайт передает виджету имя функции — либо в атрибуте data-callback, либо в параметрах, переданных в render(). Вызовите эту функцию с токеном, и собственный код сайта продолжит работу так, будто посетитель прошел проверку:
await page.evaluate((t) => {
document.querySelectorAll('[name="h-captcha-response"]').forEach((el) => { el.value = t; });
const cb = document.querySelector("[data-sitekey]")?.dataset.callback;
if (cb && typeof window[cb] === "function") window[cb](t);
}, token);
Заполнение скрытого поля тоже не помешает и покрывает сайты, которые читают поле при отправке.
Тайминг важнее обычного
У невидимого виджета сайт решает, когда запустить проверку, и обычно это момент, когда посетитель отправляет форму. Поэтому решайте капчу именно в этот момент, а не раньше. Самый простой шаблон — запустить решение прямо перед нажатием кнопки в вашем скрипте, затем вызвать callback и отправить форму.
Токены истекают примерно через две минуты. Токен, полученный при загрузке страницы и использованный через минуту, скорее всего будет отклонен.
Частая ошибка
Отправка невидимого sitekey как обычной видимой задачи может дать токен, который сайт отклоняет. Если API возвращает токен, но сайт его не принимает, проверьте по порядку:
- Установлен ли
is_invisibleвtrue? - Вызывает ли сайт callback и делает ли он это до отправки формы?
- Является ли
site_urlстраницей, на которой работает невидимый виджет? - Если сайт все равно отклоняет токен, проблема может быть связана с IP-адресом, с которого решалась капча. Сравните с решением через прокси и без прокси.
Безопасное тестирование невидимого потока
Невидимые виджеты трудно проверить вручную, потому что проверка запускается только при отправке и в большинстве случаев проходит незаметно. Тестируйте в таком порядке:
- Убедитесь, что решение возвращает токен с
is_invisible, равнымtrue, используя дымовой тест из руководства по бесплатному пробному периоду. - Вызовите callback сайта вручную в консоли браузера с этим токеном и посмотрите, продолжит ли форма работу.
- Отправьте форму из вашего скрипта и проверьте следующую страницу.
- Повторите запуск из другой сети, если можете, чтобы убедиться, что токен не привязан к IP, с которого он был решен.
Тестируйте на форме, которой вы владеете, или на тестовой копии сайта, на тестирование которой у вас есть право. Никогда не запускайте невидимый поток на реальном аккаунте, который вам не принадлежит.
Порядок событий при одной невидимой отправке
Рабочая интеграция следует такой последовательности:
- Посетитель или ваш скрипт заполняет форму.
- Ваш скрипт читает sitekey и URL страницы.
- Ваш скрипт вызывает эндпоинт решения с
is_invisible, равнымtrue, и ждет токен. - Ваш скрипт записывает токен в поле ответа и вызывает callback сайта.
- Код сайта отправляет форму с прикрепленным токеном.
Если шаг 3 происходит намного раньше шага 5, токен может истечь до отправки формы. Сделайте разрыв между ними как можно короче.
Когда сайт отклоняет невидимый токен
Отказ не всегда означает проблему с токеном. Проверьте следующее, прежде чем менять запрос на решение:
- Callback сработал до отправки формы, а не после.
- Форма читает токен из поля, в которое записал ваш скрипт. Некоторые сайты для невидимых виджетов используют другое поле.
- Запрос с токеном пришел из той же сессии, которая загрузила страницу. Cookies из другой сессии не совпадают.
- Страница не перезагружалась между решением и отправкой, иначе токен пропадет.
Только после этих проверок переходите к вопросу о прокси. Большинство отказов связаны с callback или сессией, а не с IP.
Следующие шаги
- Решение капчи на Python
- Решение PopularCaptcha в Playwright и Puppeteer
- Повторы и обработка ошибок, которые выдерживают продакшен
- Бесплатный пробный период решателя капчи
Начните с бесплатного пробного баланса, карта не нужна: создайте аккаунт и протестируйте невидимый sitekey на странице, которой вы владеете.