Scarnox · Blog

Risolvere un PopularCaptcha invisibile: differenze e cosa inviare

Il PopularCaptcha invisibile sembra non essere affatto un captcha. Non c'è alcuna casella "non sono un robot". Il sito chiama PopularCaptcha dal proprio JavaScript, di solito quando il visitatore preme invio, e mostra una sfida solo se non è sicuro del visitatore. Per uno script di automazione il widget è più difficile da individuare, ma la risoluzione resta una sola richiesta.

Scarnox risolve oggi PopularCaptcha, inclusa la variante invisibile. Imposti un solo flag, is_invisible, e invii la stessa richiesta che invieresti per un widget visibile. Gli altri tipi di captcha sono in arrivo.

Come capire che è invisibile

Decide la configurazione della sitekey, non l'aspetto della pagina. Se non sei sicuro, trova la sitekey e controlla le opzioni del widget nel JavaScript della pagina.

Cosa inviare

Usa lo stesso endpoint e lo stesso tipo di attività, e aggiungi is_invisible impostato a true:

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

Invialo con la tua chiave nell'intestazione Authorization: Bearer, come in tutti gli altri esempi. La chiamata attende finché il token è pronto, senza polling. Usa un timeout di circa 185 secondi.

Come restituire il token

Le integrazioni invisibili usano quasi sempre una callback anziché un campo del modulo. Il sito passa il nome di una funzione al widget, nell'attributo data-callback oppure nelle opzioni passate a render(). Chiama quella funzione con il token, e il codice del sito prosegue come se il visitatore avesse superato la sfida:

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

Impostare anche il campo nascosto è innocuo, e copre i siti che leggono il campo all'invio.

Il tempismo conta più del solito

Con un widget invisibile è il sito a decidere quando avviare la sfida, e di solito è il momento in cui il visitatore invia il modulo. Quindi risolvi in quel momento, non prima. Lo schema più semplice è avviare la risoluzione subito prima di premere il pulsante nel tuo script, poi chiamare la callback e inviare.

I token scadono entro circa due minuti. Un token ottenuto durante il caricamento della pagina e usato un minuto dopo probabilmente verrà rifiutato.

Errore comune

Inviare una sitekey invisibile come attività visibile normale può produrre un token che il sito rifiuta. Se l'API restituisce un token ma il sito lo rifiuta, controlla in quest'ordine:

  1. is_invisible è impostato a true?
  2. Il sito chiama la callback, e lo fa prima che il modulo venga inviato?
  3. Il site_url è la pagina in cui gira il widget invisibile?
  4. Se il sito rifiuta ancora il token, il problema può essere legato all'IP che ha risolto il captcha. Confronta con risoluzione con proxy o proxyless.

Testare un flusso invisibile in sicurezza

I widget invisibili sono difficili da testare a mano, perché la sfida gira solo all'invio e la maggior parte delle volte viene superata senza mostrare nulla. Testa in questo ordine:

  1. Verifica che la risoluzione restituisca un token con is_invisible impostato a true, usando lo smoke test della guida alla prova gratuita.
  2. Richiama tu stesso la callback del sito nella console del browser con quel token, e osserva se il modulo prosegue.
  3. Invia il modulo dal tuo script e controlla la pagina che segue.
  4. Ripeti l'esecuzione da una seconda rete, se puoi, per confermare che il token non sia legato all'IP che lo ha risolto.

Mantieni il test su un modulo di tua proprietà, o su una copia di staging del sito che sei autorizzato a testare. Non eseguire mai un flusso invisibile su un account reale che non controlli.

L'ordine degli eventi in un invio invisibile

Un'integrazione funzionante segue questa sequenza:

  1. Il visitatore, o il tuo script, compila il modulo.
  2. Il tuo script legge dalla pagina la sitekey e l'URL della pagina.
  3. Il tuo script chiama l'endpoint di risoluzione con is_invisible impostato a true e attende il token.
  4. Il tuo script scrive il token nel campo di risposta e chiama la callback del sito.
  5. Il codice del sito invia il modulo con il token allegato.

Se il passo 3 avviene molto prima del passo 5, il token potrebbe scadere prima dell'invio del modulo. Mantieni il distacco più breve possibile.

Quando il sito rifiuta un token invisibile

Un rifiuto non dipende sempre dal token. Prima di cambiare la richiesta di risoluzione, controlla questi punti:

Solo dopo questi controlli passa alla questione del proxy. La maggior parte dei rifiuti deriva dalla callback o dalla sessione, non dall'IP.

Passi successivi

Inizia con il credito di prova gratuito, senza carta: crea un account e testa una sitekey invisibile su una pagina di tua proprietà.