Sperren mit Puppeteer Stealth vermeiden

Erfahren Sie, wie Sie Puppeteer Stealth in ein Puppeteer-Scraping-Skript integrieren, um Sperren zu vermeiden.
7 min lesen
Avoid Getting Blocked With Puppeteer Stealth

Dieses Puppeteer Stealth-Tutorial behandelt:

  • Was Bot-Erkennung ist und warum sie ein Problem für Puppeteer darstellt.
  • Was Puppeteer Extra ist.
  • Wie man das Puppeteer Extra Stealth Plugin verwendet, um Sperren zu vermeiden.

Bot-Erkennung: Der größte Feind von Puppeteer

Puppeteer ist eine der am häufigsten verwendeten JavaScript-Bibliotheken für die Browser-Automatisierung. Sie ist so beliebt, weil sie vom Chrome-Team bei Google unterstützt wird. Die High-Level-API ermöglicht die Steuerung von headless oder headed Browsern über das DevTools-Protokoll und macht sie zu einem hervorragenden Werkzeug für Web-Scraping, automatisiertes Testen und Bot-Entwicklung.

Puppeteer kann jedoch leicht durch Bot-Erkennungstechnologien gestoppt werden. Das gilt besonders bei der Verwendung von Chrome/Chromium im Headless-Modus. Warum? Weil Puppeteer automatisch Standardeigenschaften und -header setzt, die den kontrollierten Browser als Headless-Instanz erscheinen lassen. Beispielsweise wird folgende Chrome-Einstellung gesetzt: navigator.webdriver: true.

Anti-Bot-Lösungen kennen das und analysieren diese Einstellungen, um festzustellen, ob der aktuelle Nutzer ein Mensch oder ein Bot ist. Wenn verdächtige Konfigurationen gefunden werden, wird der Nutzer als Bot markiert.

Betrachten Sie zum Beispiel diesen Headless-Modus-Bot-Erkennungstest. Wenn Sie die Testseite in Ihrem Browser öffnen, sehen Sie:

 Wenn Sie die Testseite in Ihrem Browser öffnen, sehen Sie, dass Sie kein Chrome Headless sind

Versuchen Sie nun, diese Seite mit Puppeteer Vanilla aufzurufen und das Testergebnis daraus zu extrahieren:

import puppeteer from "puppeteer"

(async () => {
    // set up the browser and launch it
    const browser = await puppeteer.launch()

    // open a new blank page
    const page = await browser.newPage()

    // navigate the page to the target page
    await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")

    // extract the message of the test result
    const resultElement = await page.$("#res")
    const message = await resultElement.evaluate(e => e.textContent)

    // print the resulting message
    console.log(`The result of the test is "%s"`, message);

    // close the current browser session
    await browser.close()
})()

Starten Sie das obige Skript, und Sie werden Folgendes sehen:

The result of the test is "You are Chrome headless"

Das bedeutet, dass der Test fehlgeschlagen ist, da die Seite die automatische Anfrage als von einem Headless-Browser stammend erkennen konnte.

Standardmäßig ist Puppeteer ein eingeschränktes Werkzeug. Um die Bot-Erkennung zu umgehen, müssten Sie es manuell anpassen und Standardkonfigurationen überschreiben. Vermeiden Sie all das mit Puppeteer Extra!

Puppeteer Extra: Eine erweiterbare Version von Puppeteer

Puppeteer Extra ist ein leichtgewichtiger Wrapper um Puppeteer, der es um Plugin-Unterstützung erweitert. Mit anderen Worten ist puppeteer-extra ein Drop-in-Ersatz für puppeteer. Zusätzlich zur Funktionsweise wie die beliebte Browser-Automatisierungsbibliothek bietet es die use()-Methode zur Registrierung von Plugins.

Jedes Plugin fügt Puppeteer zusätzliche Funktionalität hinzu. Einige der nützlichsten verfügbaren Plugins sind:

  • puppeteer-extra-plugin-stealth: Um es der Bot-Erkennungstechnologie schwerer zu machen, Headless-Browser-Instanzen zu erkennen.
  • puppeteer-extra-plugin-recaptcha: Um reCAPTCHAs und hCaptchas automatisch zu lösen.
  • puppeteer-extra-plugin-adblocker: Um Werbung und Tracker zu entfernen und dadurch Bandbreite und Ladezeiten zu reduzieren.
  • puppeteer-extra-plugin-devtools: Um Browser-Debugging von überall durch einen sicheren Tunnel zu den DevTools zu ermöglichen.
  • puppeteer-extra-plugin-repl: Um das Debugging mit einer interaktiven REPL (Read-Eval-Print-Loop)-Schnittstelle zu vereinfachen.
  • puppeteer-extra-plugin-block-resources: Um dynamische Seitenressourcen wie Bilder, Medien, CSS- und JS-Dateien zu blockieren.
  • puppeteer-extra-plugin-anonymize-ua: Um den User-Agent-Header bei der Seitennavigation zu anonymisieren. Erfahren Sie in unserem Leitfaden über User-Agent für Web-Scraping, warum das wichtig ist.
  • puppeteer-extra-plugin-user-preferences: Um benutzerdefinierte Chrome/Chromium-Benutzereinstellungen festzulegen.

Lassen Sie uns nun tiefer in das Puppeteer Stealth Plugin eintauchen.

Was das Puppeteer Extra Stealth Plugin ist und was es tut

puppeteer-extra-plugin-stealth ist ein Plugin für Puppeteer Extra, das eine Reihe von Konfigurationen zur Vermeidung der Bot-Erkennung enthält. Im Detail stützt sich Puppeteer Stealth auf integrierte Umgehungsmodule, die Puppeteers Schwachstellen und Eigenschaften überschreiben, die es als Bot entlarven. Beispielsweise entfernt es ‘HeadlessChrome’ aus dem User-Agent-Header und löscht die von Puppeteer standardmäßig gesetzte navigator.webdriver-Eigenschaft.

Das Ziel des Puppeteer Extra Stealth Plugins ist es, eine über Puppeteer gesteuerte Headless-Chromium-Instanz alle Bot-Erkennungstests auf sannysoft.com bestehen zu lassen. Zum Zeitpunkt dieser Aufzeichnung erreicht es dieses Ziel. Gleichzeitig gibt es laut offizieller Dokumentation noch Möglichkeiten, Headless Chromium zu erkennen. Das bedeutet, es ist unmöglich, alle Bot-Erkennungsmechanismen zu umgehen, aber die Idee des Projekts ist, diesen Prozess so schwer wie möglich zu gestalten.

Wie man Puppeteer Stealth verwendet, um Bot-Erkennung beim Scrapen von Webseiten zu vermeiden

Es ist Zeit zu sehen, wie man Puppeteer Stealth in ein puppeteer-Scraping-Skript integriert, um Sperren zu vermeiden.

Folgen Sie den nachstehenden Schritten!

Schritt 1: Puppeteer Extra und das Stealth Plugin installieren

Führen Sie den folgenden Befehl aus, um Puppeteer Extra und das Puppeteer Stealth Plugin zu den Abhängigkeiten Ihres Projekts hinzuzufügen:

npm install puppeteer-extra puppeteer-extra-plugin-stealth

Hervorragend! Sie haben gerade die Voraussetzungen erfüllt, um das Stealth Plugin in Ihr automatisiertes Puppeteer-Skript zu integrieren.

Schritt 2: Puppeteer Extra einrichten und das Stealth Plugin registrieren

Ersetzen Sie zunächst die puppeteer-Importanweisung durch diese Anweisung:

import puppeteer from "puppeteer-extra"

Mit anderen Worten: Stellen Sie sicher, dass Sie das puppeteer-Objekt aus "puppeteer-extra" und nicht aus "puppeteer" importieren.

Importieren Sie dann StealthPlugin aus puppeteer-extra-plugin-stealth:

import StealthPlugin from "puppeteer-extra-plugin-stealth"

Wenn Sie stattdessen CommonJS verwenden, benötigen Sie:

const puppeteer = require("puppeteer-extra")
const StealthPlugin = require("puppeteer-extra-plugin-stealth")

Registrieren Sie anschließend das Stealth Plugin, indem Sie es über die use()-Methode an das puppeteer-Objekt übergeben:

puppeteer.use(StealthPlugin())

Ausgezeichnet! Sie haben Puppeteer gerade die vom Plugin unterstützten Standard-Umgehungsfähigkeiten hinzugefügt.

Beachten Sie, dass der StealthPlugin()-Konstruktor ein optionales Objekt mit der Menge von Zeichenketten akzeptiert, die den zu aktivierenden Umgehungen entsprechen:

// enable only a few evasion techniques
puppeteer.use(StealthPlugin({
    enabledEvasions: new Set(["chrome.app", "chrome.csi", "defaultArgs", "navigator.plugins"])
}))

Verwenden Sie alternativ die folgende Logik, um eine bestimmte Umgehungsstrategie dynamisch aus dem Stealth Plugin zu entfernen:

const stealthPlugin = StealthPlugin()
puppeteer.use(stealthPlugin)

// ...

// remove the "user-agent-override" evasion method
pluginStealth.enabledEvasions.delete("user-agent-override")

Schritt 3: Alles zusammenführen

Integrieren Sie Puppeteer Extra und sein Stealth Plugin in das Skript, das Sie am Anfang des Artikels gesehen haben:

import puppeteer from "puppeteer-extra"
import StealthPlugin from "puppeteer-extra-plugin-stealth"

(async () => {
    // configure the stealth plugin
    puppeteer.use(StealthPlugin())
    // set up the browser and launch it
    const browser = await puppeteer.launch()

    // open a new blank page
    const page = await browser.newPage()

    // navigate the page to the target page
    await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")

    // extract the message of the test result
    const resultElement = await page.$("#res")
    const message = await resultElement.evaluate(e => e.textContent)

    // print the resulting message
    console.log(`The result of the test is "%s"`, message);

    // close the current browser session
    await browser.close()
})()

Führen Sie diesen Code-Ausschnitt aus, und er wird jetzt Folgendes ausgeben:

The result of the test is "You are not Chrome headless"

Et voilà! Die ausgewählte Seite mit Bot-Erkennungsfähigkeiten ist nicht mehr in der Lage, Ihr automatisiertes Puppeteer-Skript als Bot zu markieren.

Herzlichen Glückwunsch! Sie sind jetzt ein Puppeteer Stealth-Ninja, und keine Bot-Erkennungstechnologie wird Ihnen mehr Angst machen.

Fazit

In diesem Artikel haben Sie verstanden, warum Bot-Erkennung eine Herausforderung für Puppeteer ist und wie man damit umgeht. Dank Puppeteer Extra können Sie die Funktionalität von Puppeteer mit Plugins erweitern. Insbesondere ist das Stealth Plugin ein großartiger Verbündeter zur Umgehung der Bot-Erkennung, und hier haben Sie gelernt, wie man es einsetzt.

Egal wie ausgefeilt Ihr Puppeteer Extra ist, fortschrittliche Anti-Bot-Technologien wie Cloudflare werden Ihre Skripte weiterhin erkennen und blockieren können. Sie könnten ein anderes Browser-Automatisierungspaket wählen, aber die Ursache der Erkennung ist der Browser, nicht die Bibliothek. Die Lösung ist ein skalierbarer Browser mit Anti-Bot-Bypass-Funktionalität, der mit jeder Browser-Automatisierungsbibliothek integriert werden kann. Dieser Browser existiert und heißt Scraping-Browser!

Bright Datas Scraping-Browser ist ein hochskalierbarer Cloud-Browser, der mit Puppeteer, Playwright, Selenium und mehr funktioniert. Er rotiert automatisch die Exit-IP bei jeder Anfrage und kann Browser-Fingerprinting, CAPTCHA-Auflösung und automatische Wiederholungsversuche für Sie übernehmen. Das ist dank der Proxy-basierten Entsperr-Funktionen möglich, auf die er sich stützt.

Bright Datas Proxys werden von Fortune-500-Unternehmen und über 20.000 Kunden genutzt. Dieses zuverlässige weltweite Proxy-Netzwerk umfasst: