Menu

Bypassare Recaptcha V2 con NodeJS e Puppeteer


Cosa imparerai

  • Imposta NodeJS e Webstorm IDE nel sistema operativo Ubuntu appena installato.
  • Installa e importa i moduli anticaptchaofficial e puppeteer npm.
  • Imparerai come inviare questo modulo con Recaptcha con uno script NodeJS.
  • Impara come scrivere uno script puppeteer che apre Chromium in modalità background e naviga su una pagina.
  • Impara come acquisire uno screenshot di una pagina e salvarlo su un disco.
  • Impara come usare i selettori CSS selectors per compilare campi di testo in un modulo.
  • Impara come risolvere Recaptcha v2, compilare aree di testo #g-recaptcha-response nascoste, e inviare il modulo.
  • Note sull'ampliamento delle tue conoscenze su Javascript ES6 e NodeJS.
Source code

Imposta NodeJS e Webstorm IDE nel sistema operativo Ubuntu appena installato.

  • Ubuntu OS: installare il sistema operativo Ubuntu non è un requisito, ma un consiglio. Usare NodeJS da Windows anche è possibile, ma il nostro codice potrebbe non essere compatibile.
  • Node JS: scarica NodeJS per il tuo sistema operativo qui
  • Editor di codice: sono consigliati VS Code o Atom. Sono entrambi ambienti di sviluppo integrato (IDE) gratuiti.

Installa curl e nodejs su Ubuntu:

apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs

Installa e importa i moduli anticaptchaofficial e puppeteer npm.

Installa i moduli anti-captcha e Puppeteer npm:

npm install @antiadmin/anticaptchaofficial puppeteer

Crea un nuovo file index.js e aggiungi il seguente. Sostituisci "YOUR_API_KEY" con la tua chiave da Impostazioni API :

const ac = require("@antiadmin/anticaptchaofficial");
      const pup = require("puppeteer");
      ac.setAPIKey('YOUR_API_KEY');

Impara come scrivere uno script puppeteer che apre Chromium in modalità background e naviga su una pagina.

Aggiungi il seguente codice per risolvere prima il captcha, poi compila il modulo con login e password, copia il token g-response sull'area di testo con id="g-recaptcha-response" e invia il modulo:

const login = 'mylogin';
const password = 'my strong password';

(async () => {

    console.log('solving recaptcha ...');
    let token = await ac.solveRecaptchaV2Proxyless('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', '6LfydQgUAAAAAMuh1gRreQdKjAop7eGmi6TrNIzp');
    if (!token) {
        console.log('something went wrong');
        return;
    }

    console.log('opening browser ..');
    const browser = await pup.launch();

    console.log('creating new tab ..');
    const tab = await browser.newPage();

    console.log('changing window size .. ');
    await tab.setViewport({ width: 1360, height: 1000 });

    console.log('opening target page ..');
    await tab.goto('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', { waitUntil: "networkidle0" });

    console.log('filling login input ..');
    await tab.$eval('#contentbox > form > div > div:nth-child(1) > span > input', (element, login) => {
        element.value = login;
    }, login);

    console.log('filling password input');
    await tab.$eval('#contentbox > form > div > div:nth-child(2) > span > input', (element, password) => {
        element.value = password;
    }, password);

    console.log('setting recaptcha g-response ...');
    await tab.$eval('#g-recaptcha-response', (element, token) => {
        element.value = token;
    }, token);

    console.log('submitting form .. ');
    await Promise.all([
        tab.click('#contentbox > form > div > div.tac.padding20px > button'),
        tab.waitForNavigation({ waitUntil: "networkidle0" })
    ]);

    console.log('making a screenshot ...');
    await tab.screenshot({ path: 'screenshot.png' });

    console.log('closing browser .. ');
    await browser.close();

})();

Potresti aver notato che noi prima risolviamo il captcha e solo in un secondo momento andiamo sulla pagina e incolliamo il risultato. Funziona per i Recaptcha poichè già conosciamo la chiave del sito e il ciclo di vita del token è di 120 secondi.

Lo screenshot della pagina finale viene salvato su screenshot.png. Se vuoi vedere cosa succede nel browser, disattiva la modalità headless:

console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });

Note sull'ampliamento delle tue conoscenze su Javascript ES6 e NodeJS.

Hai imparato come bypassare un modulo con Recaptcha V2 nella sua implementazione più semplice con l'area di testo "g-recaptcha-response" come parte del modulo. Potresti voler ampliare le tue conoscenze:

Github

https://github.com/anti-captcha/solving-captcha-concepts/blob/master/tutorial1.js