Menu

Går förbi Recaptcha V2 med NodeJS och Puppeteer


Vad du ska lära dig

  • Installera NodeJS och Webstorm IDE på en ren installation av Ubuntu.
  • Installera och ladda npm-modulerna anticaptchaofficial och puppeteer.
  • Du kommer att lära dig hur du skickar detta-formulär med Recaptcha med NodeJS-skript.
  • Lär dig skriva ett Puppeteer-skript för att öppna Chromium och gå till en webbsida i bakgrunden.
  • Lär dig ta skärmdumpar av sidor och spara dem till hårddisken.
  • Lär dig fylla i formulärfält med hjälp av CSS-selektorer.
  • Lär dig lösa Recaptcha v2, fylla i dolda textarea-element (#g-recaptcha-response) och sedan skicka formuläret.
  • Tips för att fördjupa dina kunskaper om Javascript ES6 och NodeJS.
Source code

Installera NodeJS och Webstorm IDE på en ren installation av Ubuntu.

  • Ubuntu OS: Att installera Ubuntu OS är inget krav, utan en rekommendation. Att köra NodeJS från Windows är också möjligt, men vår kod kanske inte är kompatibel.
  • Node JS: Ladda ner NodeJS för ditt operativsystem här
  • Kodredigerare: Rekommenderad VS Code eller Atom. Båda är gratis IDE.

Installera curl och nodejs i Ubuntu:

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

Installera och ladda npm-modulerna anticaptchaofficial och puppeteer.

Installera anti-captcha- och Puppeteer npm-moduler:

npm install @antiadmin/anticaptchaofficial puppeteer

Skapa en ny fil index.js och lägg till följande. Ersätt "YOUR_API_KEY" med din nyckel från API-inställningar:

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

Lär dig skriva ett Puppeteer-skript för att öppna Chromium och gå till en webbsida i bakgrunden.

Lägg till följande kod för att först lösa captcha, fyll sedan i formuläret med inloggning och lösenord, klistra in g-response-token i textområdet med id="g-recaptcha-response" och skicka in formuläret:

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

})();

Du kanske noterar att vi först löser captcha och först sedan navigerar till sidan och klistrar in resultatet. Det fungerar för Recaptcha eftersom vi redan känner till webbplatsnyckeln och tokens livslängd är 120 sekunder.

Skärmdumpen av den sista sidan sparas på screenshot.png. Om du vill se vad som händer i webbläsaren, stäng av huvudlöst läge:

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

Tips för att fördjupa dina kunskaper om Javascript ES6 och NodeJS.

Du har lärt dig hur man kringgår ett formulär med Recaptcha V2 på det enklaste sättet att implementera - med textområdet "g-recaptcha-response" som en del av formuläret. Du kanske vill utöka dina kunskaper:

Github

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