Onzichtbare PopularCaptcha oplossen: hoe die verschilt en wat je stuurt
Een onzichtbare PopularCaptcha lijkt helemaal geen captcha. Er is geen "Ik ben geen robot"-vakje. De site roept PopularCaptcha aan vanuit zijn eigen JavaScript, meestal wanneer de bezoeker op verzenden drukt, en toont alleen een uitdaging als hij niet zeker is van de bezoeker. Voor een automatiseringsscript is de widget lastiger te herkennen, maar de solve is nog steeds één verzoek.
Scarnox lost PopularCaptcha vandaag op, inclusief de onzichtbare variant. Je zet één vlag, is_invisible, en stuurt hetzelfde verzoek als voor een zichtbare widget. Andere captchatypen komen eraan.
Zo zie je dat hij onzichtbaar is
- De widget heeft
data-size="invisible". - De site roept de functie
execute()van de widget aan in de eigen code. - Er staat een sitekey in de pagina, maar nergens een zichtbaar vakje.
De configuratie van de sitekey bepaalt het, niet het uiterlijk van de pagina. Twijfel je, dan zoek je de sitekey op en controleer je de widgetopties in de JavaScript van de pagina.
Wat je stuurt
Gebruik hetzelfde endpoint en hetzelfde tasktype, en voeg is_invisible toe met de waarde true:
{
"captcha_type": "PopularCaptchaTaskProxyless",
"site_key": "10000000-ffff-ffff-ffff-000000000001",
"site_url": "https://example.com/login",
"is_invisible": true
}
Stuur het met je sleutel in de header Authorization: Bearer, zoals in alle andere voorbeelden. De aanroep blokkeert tot het token klaar is, zonder polling. Gebruik een timeout van ongeveer 185 seconden.
Het token teruggeven
Onzichtbare integraties gebruiken bijna altijd een callback in plaats van een formulierveld. De site geeft de widget een functienaam mee, via het attribuut data-callback of via de opties die aan render() worden doorgegeven. Roep die functie aan met het token, en de eigen code van de site gaat verder alsof de bezoeker de uitdaging had doorstaan:
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);
Het verborgen veld ook instellen is onschadelijk, en het dekt sites die het veld bij het verzenden lezen.
Timing is belangrijker dan anders
Bij een onzichtbare widget bepaalt de site wanneer de uitdaging loopt, en dat is meestal het moment waarop de bezoeker verzendt. Los dus op dat moment op, niet eerder. Het makkelijkste patroon is de solve te starten vlak voordat je in je script op de knop drukt, daarna de callback aan te roepen en te verzenden.
Tokens verlopen binnen ongeveer twee minuten. Een token dat tijdens het laden van de pagina wordt opgehaald en een minuut later wordt gebruikt, wordt waarschijnlijk geweigerd.
Veelgemaakte fout
Een onzichtbare sitekey als gewone zichtbare taak versturen kan een token opleveren dat de site weigert. Als de API een token teruggeeft maar de site het afwijst, controleer dan deze punten in deze volgorde:
- Staat
is_invisibleoptrue? - Roept de site de callback aan, en gebeurt dat voordat het formulier verzendt?
- Is de
site_urlde pagina waarop de onzichtbare widget draait? - Als de site het token nog steeds weigert, kan het probleem gekoppeld zijn aan het IP-adres dat de solve heeft gedaan. Vergelijk met proxy versus proxyless oplossen.
Een onzichtbare flow veilig testen
Onzichtbare widgets zijn lastig met de hand te testen, omdat de uitdaging alleen bij verzenden loopt en de meeste keren zonder iets te tonen slaagt. Test in deze volgorde:
- Bevestig dat de solve een token teruggeeft met
is_invisibleoptrue, met de smoketest uit de gids over de gratis proefversie. - Roep zelf de callback van de site aan in de browserconsole met dat token, en kijk of het formulier doorgaat.
- Verstuur het formulier vanuit je script en controleer de pagina die daarna komt.
- Herhaal de run vanaf een tweede netwerk, als dat kan, om te bevestigen dat het token niet aan het IP-adres van de solve gebonden is.
Houd de test op een formulier dat van jou is, of op een stagingkopie van de site die je mag testen. Draai een onzichtbare flow nooit tegen een live account dat niet van jou is.
De volgorde van gebeurtenissen bij één onzichtbare verzending
Een werkende integratie volgt deze reeks:
- De bezoeker, of je script, vult het formulier in.
- Je script leest de sitekey en de paginaurl uit de pagina.
- Je script roept het solve-endpoint aan met
is_invisibleoptrueen wacht op het token. - Je script zet het token in het antwoordveld en roept de callback van de site aan.
- De code van de site verstuurt het formulier met het token eraan.
Als stap 3 veel eerder gebeurt dan stap 5, kan het token verlopen voordat het formulier verzendt. Houd de tussenliggende tijd zo kort mogelijk.
Wanneer de site een onzichtbaar token weigert
Een afwijzing ligt niet altijd aan het token. Controleer deze punten voordat je het solve-verzoek wijzigt:
- De callback liep voordat het formulier verzond, niet erna.
- Het formulier leest het token uit het veld waarin je script het heeft geschreven. Sommige sites gebruiken een ander veld voor onzichtbare widgets.
- Het verzoek dat het token meedraagt, kwam uit dezelfde sessie die de pagina heeft geladen. Cookies uit een andere sessie passen niet.
- De pagina is niet opnieuw geladen tussen de solve en het verzenden, want dat zou het token weggooien.
Pas nadat deze controles zijn gedaan, ga je naar de proxyvraag. De meeste afwijzingen komen door de callback of de sessie, niet door het IP-adres.
Volgende stappen
- Hoe je een PopularCaptcha in Python oplost
- Een PopularCaptcha oplossen in Playwright en Puppeteer
- Retries en foutafhandeling die productie overleven
- Gratis captchasolver-proefversie
Start met gratis proefkrediet, zonder creditcard: maak een account aan en test een onzichtbare sitekey op een pagina die van jou is.