Menu

Umgehung von Recaptcha V2 mit NodeJS und Puppeteer


Was Sie lernen werden

  • NodeJS und Webstorm IDE in frisch installiertem Ubuntu OS einrichten.
  • anticaptchaofficial und puppeteer npm Module installieren und importieren.
  • Sie werden lernen, wie man diese Formular mit Recaptcha mit NodeJS Skript einreicht.
  • Lernen Sie, wie man ein Puppeteer-Skript schreibt, das Chromium im Hintergrundmodus öffnet und zu einer Seite navigiert.
  • Erfahren Sie, wie Sie einen Screenshot einer Seite erstellen und auf einem Datenträger speichern können.
  • Lernen Sie, wie man ein Formular-Textfeld mit CSS-Selektoren ausfüllt.
  • Erfahren Sie, wie Sie Recaptcha v2 lösen, das versteckte Textfeld #g-recaptcha-response ausfüllen und das Formular absenden.
  • Hinweise zur Erweiterung Ihrer Kenntnisse über Javascript ES6 und NodeJS.
Source code

NodeJS und Webstorm IDE in frisch installiertem Ubuntu OS einrichten.

  • Ubuntu OS: Die Installation von Ubuntu OS ist keine Voraussetzung, aber eine Empfehlung. Die Ausführung von NodeJS unter Windows ist ebenfalls möglich, aber unser Code ist möglicherweise nicht kompatibel.
  • Node JS: Laden Sie NodeJS für Ihr Betriebssystem herunter hier
  • Code-Editor: Empfohlen VS Code oder Atom. Beide sind freie IDE.

Installieren Sie curl und nodejs in Ubuntu:

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

anticaptchaofficial und puppeteer npm Module installieren und importieren.

Installieren Sie Anti-Captcha und Puppeteer npm Module:

npm install @antiadmin/anticaptchaofficial puppeteer

Erstellen Sie eine neue Datei index.js und fügen Sie Folgendes hinzu. Ersetzen Sie "YOUR_API_KEY" durch Ihren Schlüssel aus API-Einstellungen :

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

Lernen Sie, wie man ein Puppeteer-Skript schreibt, das Chromium im Hintergrundmodus öffnet und zu einer Seite navigiert.

Fügen Sie den folgenden Code ein, um zuerst das Captcha zu lösen, dann das Formular mit Login und Passwort auszufüllen, das g-response-Token in das Textfeld mit id="g-recaptcha-response" einzufügen und das Formular abzuschicken:

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

})();

Sie werden feststellen, dass wir zuerst das Captcha lösen und erst dann zur Seite navigieren und das Ergebnis einfügen. Es funktioniert für Recaptcha, da wir den Sitekey bereits kennen und die Lebensdauer des Tokens 120 Sekunden beträgt.

Das Bildschirmfoto der letzten Seite wird in der Datei screenshot.png gespeichert. Wenn Sie sehen möchten, was im Browser vor sich geht, schalten Sie den Headless-Modus aus:

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

Hinweise zur Erweiterung Ihrer Kenntnisse über Javascript ES6 und NodeJS.

Sie haben gelernt, wie man ein Formular mit Recaptcha V2 in seiner einfachsten Implementierung umgeht - mit der Textarea "g-recaptcha-response" als Teil des Formulars. Vielleicht möchten Sie Ihr Wissen erweitern:

Github

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