Scarnox · Blog

Rozwiązywanie niewidocznego PopularCaptcha: czym się różni i co wysłać

Niewidoczne PopularCaptcha wygląda jak brak captcha. Nie ma pola „Nie jestem robotem”. Strona wywołuje PopularCaptcha ze swojego własnego JavaScriptu, zwykle w chwili, gdy odwiedzający naciska przycisk wysłania, i pokazuje wyzwanie tylko wtedy, gdy nie jest pewna odwiedzającego. Dla skryptu automatyzacji widget jest trudniej zauważyć, ale rozwiązanie to wciąż jedno żądanie.

Scarnox rozwiązuje dziś PopularCaptcha, także wariant niewidoczny. Ustawiasz jedną flagę, is_invisible, i wysyłasz to samo żądanie, co dla widocznego widgetu. Inne typy captcha są wkrótce.

Jak rozpoznać, że captcha jest niewidoczne

O tym decyduje konfiguracja sitekey, a nie wygląd strony. Jeśli nie masz pewności, znajdź sitekey i sprawdź opcje widgetu w JavaScripcie strony.

Co wysłać

Użyj tego samego endpointu i tego samego typu zadania, a dodaj is_invisible ustawione na true:

{
  "captcha_type": "PopularCaptchaTaskProxyless",
  "site_key": "10000000-ffff-ffff-ffff-000000000001",
  "site_url": "https://example.com/login",
  "is_invisible": true
}

Wyślij to z kluczem w nagłówku Authorization: Bearer, jak we wszystkich innych przykładach. Wywołanie blokuje się, aż token będzie gotowy, bez odpytywania. Ustaw limit czasu około 185 sekund.

Przekazanie tokena z powrotem

Integracje niewidoczne prawie zawsze używają callbacku zamiast pola formularza. Strona przekazuje nazwę funkcji do widgetu, albo w atrybucie data-callback, albo w opcjach przekazanych do render(). Wywołaj tę funkcję z tokenem, a kod strony będzie działał dalej tak, jakby odwiedzający przeszedł wyzwanie:

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);

Ustawienie też ukrytego pola jest nieszkodliwe i obejmuje strony, które czytają to pole przy wysyłaniu.

Czas ma większe znaczenie niż zwykle

Przy niewidocznym widgecie to strona decyduje, kiedy uruchomić wyzwanie, a zwykle jest to chwila wysłania przez odwiedzającego. Rozwiązuj więc dokładnie w tym momencie, a nie wcześniej. Najprostszy wzorzec to uruchomienie rozwiązania tuż przed naciśnięciem przycisku w skrypcie, potem wywołanie callbacku i wysłanie.

Tokeny wygasają po około dwóch minutach. Token pobrany podczas ładowania strony i użyty minutę później najpewniej zostanie odrzucony.

Częsty błąd

Wysłanie niewidocznego sitekey jako zwykłego zadania widocznego może dać token, który strona odrzuca. Jeśli API zwraca token, ale strona go nie akceptuje, sprawdź po kolei:

  1. Czy is_invisible ma wartość true?
  2. Czy strona wywołuje callback i czy robi to przed wysłaniem formularza?
  3. Czy site_url to strona, na której działa niewidoczny widget?
  4. Jeśli strona nadal odrzuca token, problem może być związany z adresem IP, z którego rozwiązano captcha. Porównaj z rozwiązywaniem z proxy a bez proxy.

Bezpieczne testowanie niewidocznego przepływu

Niewidoczne widgety trudno testować ręcznie, bo wyzwanie uruchamia się dopiero przy wysyłaniu, a w większości przypadków przechodzi bez pokazywania czegokolwiek. Testuj w tej kolejności:

  1. Potwierdź, że rozwiązanie zwraca token przy is_invisible ustawionym na true, używając testu dymnego z przewodnika o darmowym okresie próbnym.
  2. Wywołaj callback strony sam, w konsoli przeglądarki, z tym tokenem i obserwuj, czy formularz przechodzi dalej.
  3. Wyślij formularz ze skryptu i sprawdź stronę, która się pojawia.
  4. Jeśli to możliwe, powtórz przebieg z innej sieci, żeby potwierdzić, że token nie jest związany z adresem IP, który go rozwiązał.

Test prowadź na formularzu, który posiadasz, albo na kopii stagingowej strony, do której masz prawo. Nigdy nie uruchamiaj niewidocznego przepływu na żywym koncie, którego nie kontrolujesz.

Kolejność zdarzeń w jednym niewidocznym wysłaniu

Działająca integracja przebiega w tej sekwencji:

  1. Odwiedzający albo twój skrypt wypełnia formularz.
  2. Skrypt odczytuje sitekey i adres URL strony.
  3. Skrypt wywołuje endpoint rozwiązania z is_invisible ustawionym na true i czeka na token.
  4. Skrypt wpisuje token do pola odpowiedzi i wywołuje callback strony.
  5. Kod strony wysyła formularz z dołączonym tokenem.

Jeśli krok 3 dzieje się wyraźnie wcześniej niż krok 5, token może wygasnąć, zanim formularz zostanie wysłany. Skróć przerwę tak bardzo, jak to możliwe.

Gdy strona odrzuca niewidoczny token

Odrzucenie nie zawsze oznacza problem z tokenem. Zanim zmienisz żądanie rozwiązania, sprawdź:

Dopiero po tych sprawdzeniach przejdź do pytania o proxy. Większość odrzuceń wynika z callbacku lub sesji, a nie z adresu IP.

Dalsze kroki

Zacznij z darmowym kredytem próbnym, bez karty: załóż konto i przetestuj niewidoczny sitekey na stronie, którą posiadasz.