Menu

Recaptcha V2 omzeilen met NodeJS en Puppeteer


Wat u gaat leren

  • Instellen NodeJS en Webstorm IDE in nieuwe geïnstalleerde Ubuntu OS.
  • Installeer en importeer anticaptcha officiële en puppeteer npm modules.
  • U leert hoe u dit formulier met Recaptcha met NodeJS-script verzendt.
  • 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 uit 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 het tekstgedeelte 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 misschien 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 sitesleutel al kennen en de levensduur van het token 120 seconden is.

De schermafbeelding van de eindpagina wordt opgeslagen in screenshot.png. Als u wilt zien wat er in de browser gebeurt, schakel dan de headless-modus 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.

U hebt geleerd hoe u een formulier met Recaptcha V2 op de eenvoudigste manier kunt omzeilen - met "g-recaptcha-response" tekstgedeelte als onderdeel van het formulier. Misschien wilt u uw kennis uitbreiden:

Github

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