So umgehen Sie CAPTCHA im Jahr 2024#

Was wirst du lernen?#

Sie erfahren, wie Sie mit Puppeteer in Nodejs mithilfe verschiedener Methoden CAPTCHA umgehen:

Kann Puppeteer CAPTCHA umgehen?#

Die Antwort ist ja. Es gibt zwei Möglichkeiten, CAPTCHAs zu umgehen: die Verwendung eines CAPTCHA-Solvers (schneller und günstiger) oder die Implementierung fortschrittlicher Techniken, um sie zu verhindern.

Methode Nr. 1: Umgehen Sie CAPTCHA mit Puppeteer und NextCaptcha#

Wir werden mit dem Solver-Dienst namens NextCaptcha arbeiten, um CAPTCHA in Puppeteer anhand einer offiziellen Demo zu verarbeiten. Installieren wir also einige Abhängigkeiten und importieren die Module
  npm install -S puppeteer nextcaptcha-ts
  import NextCaptcha from 'nextcaptcha-ts';
  import puppeteer from 'puppeteer';
Öffnen Sie dann eine Chrome-Instanz und navigieren Sie zur Demoseite.
  const url = "https://www.google.com/recaptcha/api2/demo"

  const browser = await puppeteer.launch({});
  const page = await browser.newPage();
  await page.goto(url, {
    waitUntil: 'networkidle0',
  });
Der nächste Schritt besteht darin, den CAPTCHA-Websiteschlüssel und die Website-URL für den  NextCaptcha-Client zu ermitteln, der die Textlösung zurückgibt. Speichern Sie sie in der Variable data.solution.gRecaptchaResponse.
  const data = await client.recaptchaV2({websiteKey, websiteURL: url});
  console.log('gRecaptchaResponse: ', data.solution.gRecaptchaResponse);
  console.log('submitting form .. ');
  await Promise.all([
      page.click('#recaptcha-demo-submit'),
      page.waitForNavigation({ waitUntil: "networkidle0" })
  ]);

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

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

Methode Nr. 2: Implementieren Sie Puppeteer Stealth#

Die Verwendung von Puppeteer lässt sich leicht erkennen, da die Basisversion eindeutige Bot-Signale sendet, wie etwa den User-Agent-Namen, der leicht zu einem CAPTCHA führen kann. Und um dies zu beweisen, versuchen wir, auf die Prüfsite sannysoft.com zuzugreifen. Erstellen Sie dazu eine Headless-Chrome-Instanz, übergeben Sie die Ziel-URL an die Funktion goto() , um zu warten, bis die Seite geladen ist, und machen Sie einen Screenshot.
  import NextCaptcha from 'nextcaptcha-ts';
  import puppeteer from 'puppeteer';

  const url = "https://bot.sannysoft.com"
  const browser = await puppeteer.launch({
      headless: true
  });
  const page = await browser.newPage();
  await page.goto(url, {
      waitUntil: 'networkidle0',
  });
  console.log('making a screenshot ...');
  await page.screenshot({ path: 'screenshot.png' });
  await sleep(30000)
  console.log('closing browser .. ');
  await browser.close();


  function sleep(time = 1000) {
      return new Promise((resolve) => {
          setTimeout(() => {
              resolve(true)
          }, time)
      })
  }
Es wird angezeigt, dass WebDrive vorhanden ist (fehlgeschlagen). Zugriff verweigert! Sannysoft hat nicht-menschlichen Datenverkehr erkannt und unseren Bot blockiert. Hier kommt das Puppeteer-Extra-Plugin-Stealth zur Hilfe, ein Plugin für Puppeteer-Extra und Playwright-Extra zur Verhinderung der Erkennung. Es lässt Ihren Datenverkehr manueller aussehen und verhindert, dass er blockiert wird, z. B. mit CAPTCHAs. Installieren Sie zunächst das Stealth-Paket
  npm install puppeteer-extra puppeteer-extra-plugin-stealth
  import puppeteer from 'puppeteer-extra';
  import puppeteer-extra-plugin-stealth from 'puppeteer-extra-plugin-stealth';

  const StealthPlugin = require('puppeteer-extra-plugin-stealth')
  puppeteer.use(StealthPlugin())
dann verwenden Sie den Puppenspieler als normale
  const url = "https://bot.sannysoft.com"
  const browser = await puppeteer.launch({
      headless: true
  });
  const page = await browser.newPage();
  await page.goto(url, {
      waitUntil: 'networkidle0',
  });
  console.log('making a screenshot ...');
  await page.screenshot({ path: 'screenshot.png' });
  await sleep(30000)
  console.log('closing browser .. ');
  await browser.close();


  function sleep(time = 1000) {
      return new Promise((resolve) => {
          setTimeout(() => {
              resolve(true)
          }, time)
      })
  }
Schauen wir uns die Ausgabe an: check-success Erfolg! Dies hilft, CAPTCHA mit Puppeteer zu umgehen.

Abschluss#

Für einen erfolgreichen Datenabruf benötigen Sie ein leistungsstarkes Tool, auf das Sie sich bei der Handhabung von CAPTCHAs vollständig verlassen können. NextCaptcha bietet eine einfach einzurichtende API, mit der Sie alle Herausforderungen im Zusammenhang mit Bots meistern können. Sie können es noch heute kostenlos ausprobieren.