Розв'язання невидимої 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, яка його розв'язала.
Тримайте тест на формі, яка належить вам, або на staging-копії сайту, яку вам дозволено тестувати. Ніколи не запускайте невидимий потік на живому обліковому записі, який ви не контролюєте.
Порядок подій в одній невидимій відправці
Робоча інтеграція дотримується такої послідовності:
- Відвідувач, або ваш скрипт, заповнює форму.
- Ваш скрипт зчитує sitekey і URL сторінки зі сторінки.
- Ваш скрипт викликає ендпоінт розв'язання з
is_invisibleу значенніtrueі чекає на токен. - Ваш скрипт записує токен у поле відповіді і викликає callback сайту.
- Код сайту відправляє форму з прикріпленим токеном.
Якщо крок 3 відбувається значно раніше за крок 5, токен може сплисти до відправки форми. Тримайте проміжок якомога коротшим.
Коли сайт відхиляє невидимий токен
Відхилення не завжди означає проблему з токеном. Перевірте ці пункти, перш ніж змінювати запит на розв'язання:
- Callback спрацював до відправки форми, а не після.
- Форма читає токен з поля, у яке записав ваш скрипт. Деякі сайти використовують інше поле для невидимих віджетів.
- Запит, що несе токен, прийшов з тієї самої сесії, яка завантажила сторінку. Cookie з іншої сесії не збігаються.
- Сторінка не перезавантажувалася між розв'язанням і відправкою, бо це знищило б токен.
Лише після цих перевірок переходьте до питання про проксі. Більшість відхилень спричинені callback або сесією, а не IP.
Що далі
- Як розв'язати PopularCaptcha на Python
- Розв'язання PopularCaptcha у Playwright і Puppeteer
- Повтори і обробка помилок, які витримують продакшен
- Безкоштовний пробний розв'язувач капчі
Почніть з безкоштовного пробного кредиту, картка не потрібна: створіть обліковий запис і протестуйте невидимий sitekey на сторінці, яка належить вам.