Scarnox · Blog

Розв'язання невидимої PopularCaptcha: чим відрізняється і що надсилати

Невидима PopularCaptcha виглядає так, ніби капчі взагалі немає. Немає поля "я не робот". Сайт викликає PopularCaptcha зі свого JavaScript, зазвичай коли відвідувач натискає відправку, і показує завдання лише тоді, коли не впевнений щодо відвідувача. Для скрипта автоматизації віджет важче помітити, але розв'язання все одно є одним запитом.

Scarnox розв'язує PopularCaptcha сьогодні, включно з невидимим варіантом. Ви встановлюєте один прапорець, is_invisible, і надсилаєте той самий запит, що й для видимого віджета. Інші типи капчі з'являться скоро.

Як зрозуміти, що капча невидима

Рішення приймає конфігурація 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 повертає токен, а сайт його не приймає, перевірте ці пункти по порядку:

  1. Чи встановлено is_invisible у значення true?
  2. Чи викликає сайт callback, і чи робить це до відправки форми?
  3. Чи site_url є сторінкою, де працює невидимий віджет?
  4. Якщо сайт усе одно відхиляє токен, проблема може бути пов'язана з IP-адресою, з якої його розв'язано. Порівняйте з розв'язанням через проксі і без проксі.

Безпечне тестування невидимого потоку

Невидимі віджети важко тестувати вручну, бо завдання запускається лише під час відправки і більшість часу проходить без жодного показу. Тестуйте в такому порядку:

  1. Переконайтеся, що розв'язання повертає токен з is_invisible у значенні true, скориставшись димовим тестом із посібника про безкоштовний пробний період.
  2. Викличте callback сайту вручну в консолі браузера з цим токеном і подивіться, чи продовжує форма роботу.
  3. Відправте форму зі свого скрипта і перевірте сторінку, яка відкривається далі.
  4. За можливості повторіть запуск з другої мережі, щоб переконатися, що токен не прив'язаний до IP, яка його розв'язала.

Тримайте тест на формі, яка належить вам, або на staging-копії сайту, яку вам дозволено тестувати. Ніколи не запускайте невидимий потік на живому обліковому записі, який ви не контролюєте.

Порядок подій в одній невидимій відправці

Робоча інтеграція дотримується такої послідовності:

  1. Відвідувач, або ваш скрипт, заповнює форму.
  2. Ваш скрипт зчитує sitekey і URL сторінки зі сторінки.
  3. Ваш скрипт викликає ендпоінт розв'язання з is_invisible у значенні true і чекає на токен.
  4. Ваш скрипт записує токен у поле відповіді і викликає callback сайту.
  5. Код сайту відправляє форму з прикріпленим токеном.

Якщо крок 3 відбувається значно раніше за крок 5, токен може сплисти до відправки форми. Тримайте проміжок якомога коротшим.

Коли сайт відхиляє невидимий токен

Відхилення не завжди означає проблему з токеном. Перевірте ці пункти, перш ніж змінювати запит на розв'язання:

Лише після цих перевірок переходьте до питання про проксі. Більшість відхилень спричинені callback або сесією, а не IP.

Що далі

Почніть з безкоштовного пробного кредиту, картка не потрібна: створіть обліковий запис і протестуйте невидимий sitekey на сторінці, яка належить вам.