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
- Widget ma
data-size="invisible". - Strona wywołuje funkcję
execute()widgetu w swoim kodzie. - Na stronie jest sitekey, ale nigdzie nie widać pola wyboru.
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:
- Czy
is_invisiblema wartośćtrue? - Czy strona wywołuje callback i czy robi to przed wysłaniem formularza?
- Czy
site_urlto strona, na której działa niewidoczny widget? - 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:
- Potwierdź, że rozwiązanie zwraca token przy
is_invisibleustawionym natrue, używając testu dymnego z przewodnika o darmowym okresie próbnym. - Wywołaj callback strony sam, w konsoli przeglądarki, z tym tokenem i obserwuj, czy formularz przechodzi dalej.
- Wyślij formularz ze skryptu i sprawdź stronę, która się pojawia.
- 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:
- Odwiedzający albo twój skrypt wypełnia formularz.
- Skrypt odczytuje sitekey i adres URL strony.
- Skrypt wywołuje endpoint rozwiązania z
is_invisibleustawionym natruei czeka na token. - Skrypt wpisuje token do pola odpowiedzi i wywołuje callback strony.
- 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ź:
- Czy callback uruchomił się przed wysłaniem formularza, a nie po nim?
- Czy formularz czyta token z pola, do którego zapisał go twój skrypt? Niektóre strony używają innego pola dla niewidocznych widgetów.
- Czy żądanie z tokenem pochodzi z tej samej sesji, która załadowała stronę? Ciasteczka z innej sesji nie pasują.
- Czy strona nie przeładowała się między rozwiązaniem a wysłaniem? Przeładowanie odrzuca token.
Dopiero po tych sprawdzeniach przejdź do pytania o proxy. Większość odrzuceń wynika z callbacku lub sesji, a nie z adresu IP.
Dalsze kroki
- Jak rozwiązać PopularCaptcha w Pythonie
- Rozwiązywanie PopularCaptcha w Playwright i Puppeteer
- Ponawianie i obsługa błędów, które wytrzymują produkcję
- Darmowy okres próbny solvera captcha
Zacznij z darmowym kredytem próbnym, bez karty: załóż konto i przetestuj niewidoczny sitekey na stronie, którą posiadasz.