Menu

Recaptcha V2 omzeilen met NodeJS en Puppeteer


Wat je gaat leren

  • Instellen NodeJS en Webstorm IDE in nieuwe geïnstalleerde Ubuntu OS.
  • Installeer en importeer anticaptcha officiële en puppeteer npm modules.
  • Je leert hoe je een deze formulier met Recaptcha met NodeJS script kunt indienen.
  • Leer hoe u een puppeteer script schrijft dat Chromium in achtergrondmodus opent en naar een pagina navigeert.
  • Leer hoe u een schermafbeelding maakt van een pagina en het op schijf opslaat.
  • Leer hoe u formuliervelden vult door middel van CSS selectors.
  • Leer hoe u Recaptcha v2 oplost, verborgen tekstgedeelten vult met #g-recaptcha-response en het formulier indient.
  • Opmerkingen over het uitbreiden van uw kennis over Javascript ES6 en NodeJS.
Source code

Instellen NodeJS en Webstorm IDE in nieuwe geïnstalleerde Ubuntu OS.

  • Ubuntu OS: Het installeren van Ubuntu OS is geen vereiste, maar een aanbeveling. NodeJS draaien vanuit Windows is ook mogelijk, maar onze code is mogelijk niet compatibel.
  • Node JS: Download NodeJS voor uw besturingssysteem hier
  • Code editor: Aanbevolen VS Code of Atom. Beide zijn gratis IDE.

Installeer curl en nodejs in Ubuntu:

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

Installeer en importeer anticaptcha officiële en puppeteer npm modules.

Installeer anti-captcha en Puppeteer npm modules:

npm install @antiadmin/anticaptchaofficial puppeteer

Maak een nieuw bestand index.js en voeg het volgende toe. Vervang "YOUR_API_KEY" door uw sleutel van API-instellingen :

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

Leer hoe u een puppeteer script schrijft dat Chromium in achtergrondmodus opent en naar een pagina navigeert.

Voeg de volgende code toe om eerst de captcha op te lossen, vul dan het formulier met login en wachtwoord, plak g-response token in de textarea met id="g-recaptcha-response" en verzend het formulier:

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

})();

U merkt op dat we eerst de captcha oplossen en dan pas naar de pagina navigeren en het resultaat plakken. Het werkt voor Recaptcha omdat we de sitekey al kennen en de levensduur van het token 120 seconden is.

Het screenshot van de eindpagina wordt opgeslagen in screenshot.png. Als je wilt zien wat er in de browser gebeurt, schakel dan de headless mode uit:

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

Opmerkingen over het uitbreiden van uw kennis over Javascript ES6 en NodeJS.

Je hebt geleerd hoe je een formulier met Recaptcha V2 op de eenvoudigste manier kunt omzeilen - met "g-recaptcha-response" textarea als onderdeel van het formulier. Misschien wil je je kennis uitbreiden:

Github

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