Scarnox · Blog

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 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:

  1. Staat is_invisible op true?
  2. Roept de site de callback aan, en gebeurt dat voordat het formulier verzendt?
  3. Is de site_url de pagina waarop de onzichtbare widget draait?
  4. 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:

  1. Bevestig dat de solve een token teruggeeft met is_invisible op true, met de smoketest uit de gids over de gratis proefversie.
  2. Roep zelf de callback van de site aan in de browserconsole met dat token, en kijk of het formulier doorgaat.
  3. Verstuur het formulier vanuit je script en controleer de pagina die daarna komt.
  4. 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:

  1. De bezoeker, of je script, vult het formulier in.
  2. Je script leest de sitekey en de paginaurl uit de pagina.
  3. Je script roept het solve-endpoint aan met is_invisible op true en wacht op het token.
  4. Je script zet het token in het antwoordveld en roept de callback van de site aan.
  5. 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:

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

Start met gratis proefkrediet, zonder creditcard: maak een account aan en test een onzichtbare sitekey op een pagina die van jou is.