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
- Il widget ha
data-size="invisible". - Il sito chiama la funzione
execute()del widget dal proprio codice. - Nella pagina c'è una sitekey, ma non compare nessuna casella visibile.
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:
is_invisibleè impostato atrue?- Il sito chiama la callback, e lo fa prima che il modulo venga inviato?
- Il
site_urlè la pagina in cui gira il widget invisibile? - 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:
- Verifica che la risoluzione restituisca un token con
is_invisibleimpostato atrue, usando lo smoke test della guida alla prova gratuita. - Richiama tu stesso la callback del sito nella console del browser con quel token, e osserva se il modulo prosegue.
- Invia il modulo dal tuo script e controlla la pagina che segue.
- 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:
- Il visitatore, o il tuo script, compila il modulo.
- Il tuo script legge dalla pagina la sitekey e l'URL della pagina.
- Il tuo script chiama l'endpoint di risoluzione con
is_invisibleimpostato atruee attende il token. - Il tuo script scrive il token nel campo di risposta e chiama la callback del sito.
- 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:
- La callback è stata eseguita prima dell'invio del modulo, non dopo.
- Il modulo legge il token dal campo in cui il tuo script lo ha scritto. Alcuni siti usano un campo diverso per i widget invisibili.
- La richiesta che porta il token arriva dalla stessa sessione che ha caricato la pagina. I cookie di un'altra sessione non corrispondono.
- La pagina non si è ricaricata tra la risoluzione e l'invio, cosa che farebbe perdere il token.
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
- Come risolvere un PopularCaptcha in Python
- Risolvere un PopularCaptcha con Playwright e Puppeteer
- Nuovi tentativi e gestione degli errori che reggono in produzione
- Prova gratuita del solver captcha
Inizia con il credito di prova gratuito, senza carta: crea un account e testa una sitekey invisibile su una pagina di tua proprietà.