Verwendung von puppeteer-humanize für Web Scraping: 2025 Anleitung

Erfahren Sie, warum puppeteer-humanize das Web-Scraping verbessert, indem es menschliche Aktionen nachahmt, um die Analyse des Nutzerverhaltens zu umgehen.
11 min lesen
Puppeteer humanize web scraping

In diesem Artikel erfahren Sie mehr:

  • Warum Vanilla Puppeteer nicht ausreicht, um das Nutzerverhalten zu analysieren.
  • Was Puppenspieler-Humanisierung ist und wie sie hilft, diese Grenzen zu überwinden.
  • Wie man es für Web Scraping verwendet, wird in einer schrittweisen Anleitung beschrieben.
  • Die verbleibenden Herausforderungen bei diesem Ansatz zum Scraping von Webdaten.

Lasst uns eintauchen!

Analyse des Benutzerverhaltens: Warum Standard-Puppenspieler zu kurz kommen

Bei der Analyse des Nutzerverhaltens (User Behaviour Analytics, UBA) werden Daten darüber gesammelt und analysiert, wie Nutzer mit einer Webseite interagieren. Beim Web Scraping besteht das Hauptziel darin, anomales oder verdächtiges Verhalten zu erkennen, um Bots zu identifizieren.

Diese ausgeklügelte Anti-Bot-Technik wird immer beliebter. Der Grund dafür ist, dass moderne KI-gesteuerte Bots sich ständig weiterentwickeln und immer menschenähnlicher werden. Daher sind herkömmliche Bot-Erkennungsmethoden unter Umständen nicht mehr wirksam gegen sie.

Um UBA entgegenzuwirken, versuchen einige Automatisierungsbibliotheken, menschliches Verhalten realistischer zu imitieren. Sie simulieren zum Beispiel Mausbewegungen mit Hilfe von Heuristiken oder sogar maschinellem Lernen. Dennoch wirkt das Tippen in den meisten Fällen eher roboterhaft, was ein Problem darstellt.

Nehmen Sie nun an, dass Ihr Puppeteer-Skript ein Formular ausfüllen muss. Selbst wenn Sie mit der Funktion type() eine kleine Verzögerung zwischen den Tastenanschlägen einfügen, würde diese Interaktion nicht natürlich wirken.

Nehmen Sie das Anmeldeformular bei Quotes to Scrape als Beispiel:

import puppeteer from "puppeteer";

(async () => {
  // set up a new browser instance in headful mode
  const browser = await puppeteer.launch({
    headless: false, // set to false so you can watch the interaction
    defaultViewport: null,
  });
  const page = await browser.newPage();

  // connect to the target page
  await page.goto("https://quotes.toscrape.com/login");

  // simulate typing with a delay of 200ms between each character
  await page.type("input[name=\"username\"]", "username", { delay: 200 });
  await page.type("input[name=\"password\"]", "password", { delay: 200 });

  // ...

  // close the browser and release its resources
  await browser.close();
})();

So würde die Interaktion aussehen:

Die Puppeteer-Bot-ähnliche Interaktion

Auch wenn der oben beschriebene Ansatz realistischer ist als die direkte Eingabe von Werten in die Eingabefelder, sieht er dennoch nicht menschlich aus. Das Problem ist, dass die Eingabe zu glatt, konsistent und fehlerfrei erscheint. Fragen Sie sich selbst – welcher echte Benutzer tippt jedes Zeichen in genau demselben Intervall, ohne Zögern oder Tippfehler?

Wie Sie sich vorstellen können, können fortgeschrittene UBA-Systeme solche Skripte leicht erkennen. Hier kommen Tools wie puppeteer-humanize ins Spiel!

Was ist Puppenspieler-humanisieren?

puppeteer-humanize ist eine Node.js-Bibliothek, die die Puppeteer-Automatisierung menschenähnlicher macht, insbesondere bei der Interaktion mit Texteingabefeldern. Sie hilft dabei, gängige Bot-Erkennungsmethoden zu umgehen, die das Benutzerverhalten analysieren und oft unrealistische oder übermäßig präzise Aktionen markieren.

Um dies zu erreichen, fügt puppeteer-humanize realistische Unvollkommenheiten in normale Puppeteer-Interaktionen ein:

  1. Simulation von Tippfehlern.
  2. Nachahmung des Gebrauchs der Rücktaste, um diese Fehler zu korrigieren.
  3. Wiederholte Eingabe von gelöschtem Text mit zufälligen Verzögerungen.
  4. Einführen von zufälligen Verzögerungen zwischen den Tastenanschlägen, um die Tippgeschwindigkeit zu variieren.

Dies lässt die automatische Eingabe natürlicher und weniger mechanisch erscheinen. Es ist jedoch wichtig zu beachten, dass sich die Bibliothek nur auf die Vermenschlichung des Tippverhaltens und der Formulareingaben konzentriert. Es handelt sich also nicht um eine umfassende Lösung zur Umgehung von Robotern.

Bedenken Sie auch, dass die letzte Übertragung im Jahr 2021 stattfand und noch keine fortgeschrittenen Funktionen wie die GAN-basierte Mausbewegungssimulation unterstützt. Daher bleibt sein Anwendungsbereich auf das Tippverhalten beschränkt.

Wie man puppeteer-humanize für Web Scraping verwendet

Führen Sie die folgenden Schritte aus, um zu erfahren, wie Sie mit puppeteer-humanize einen menschenähnlichen Scraping-Bot erstellen können. Dies verringert die Wahrscheinlichkeit, von UBA-Systemen entdeckt zu werden, insbesondere wenn Ihr Skript Daten in Formulare eingeben muss.

Das Ziel ist das Anmeldeformular bei Quotes to Scrape:

Dieses Beispiel soll lediglich zeigen, wie man ein realistisches Ausfüllen von Formularen simulieren kann. Vermeiden Sie in realen Scraping-Szenarien das Scraping von Inhalten hinter Anmeldeformularen, es sei denn, Sie haben die ausdrückliche Erlaubnis dazu, da dies zu rechtlichen Problemen führen kann.

Jetzt wollen wir sehen, wie man puppeteer-humanize für Web-Scraping verwendet!

Schritt 1: Projekt einrichten

Wenn Sie noch kein Node.js-Projekt eingerichtet haben, können Sie eines in Ihrem Projektordner mit npm init erstellen:

npm init -y

Mit dem obigen Befehl wird eine package.json-Datei in Ihrem Projektverzeichnis erstellt. Erstellen Sie innerhalb des Projektordners eine Datei script.js, in der Sie Ihre JavaScript-Scraping-Logik unterbringen:

your-project-folder/
├── package.json
└── script.js

Öffnen Sie dann den Ordner in Ihrer bevorzugten JavaScript-IDE. Visual Studio Code wird perfekt funktionieren.

Ändern Sie in Ihrer IDE die Datei package.json, um die folgende Zeile einzufügen:

"type": "module"

Damit wird Ihr Projekt so eingestellt, dass ESM(ECMAScript Modules) verwendet wird, was im Allgemeinen für moderne Node.js-Projekte gegenüber dem Standardformat CommonJS empfohlen wird.

Großartig! Sie sind nun bereit, die Vorteile von puppeteer-humanize zu nutzen, um realistische Interaktionen in Ihren Scraping-Skripten zu simulieren.

Schritt #2: Installieren und loslegen mit puppeteer-humanize

Während puppeteer-humanize ursprünglich ein Plugin für Puppeteer Extra war, ist dies nun nicht mehr der Fall. Um es zu verwenden, müssen Sie es also nur installieren:

Installieren Sie beide mit dem folgenden Befehl:

npm install @forad/puppeteer-humanize puppeteer

Als nächstes öffnen Sie Ihre Datei script.js und initialisieren ein einfaches Puppeteer-Skript wie dieses:

import puppeteer from "puppeteer";

(async () => {
  // set up a new browser instance in headful mode
  const browser = await puppeteer.launch({
    headless: false, // set to false so you can watch the interaction
    defaultViewport: null,
  });
  const page = await browser.newPage();

  // ...

  // close the browser and release its resources
  await browser.close();
})();

Fantastisch! Sie können nun mit der Implementierung Ihrer menschlich anmutenden Scraping-Interaktionen beginnen.

Schritt #3: Verbinden Sie sich mit der Zielseite und wählen Sie die Eingabeelemente aus

Verwenden Sie Puppeteer, um zur Zielseite zu navigieren:

await page.goto("https://quotes.toscrape.com/login");

Öffnen Sie nun dieselbe Seite in Ihrem Browser, klicken Sie mit der rechten Maustaste auf das Anmeldeformular und wählen Sie “Untersuchen”, um die Formularelemente zu untersuchen:

Sie werden feststellen, dass das Formular enthält:

  • Ein Eingabefeld für den Benutzernamen, den Sie mit input[name="username"] auswählen können
  • Ein Passwort-Eingabefeld, das Sie mit input[name="password"] auswählen können

Um diese Eingabeelemente in Ihrem Skript auszuwählen, verwenden Sie die $() -Methode von Puppeteer:

const usernameInput = await page.$("input[name=\"username\"]");
const passwordInput = await page.$("input[name=\"password\"]");

⚠️ Wichtig: puppeteer-humanize arbeitet nicht mit Locatoren. Das bedeutet, dass Sie $() oder $$() verwenden müssen, um Element-Handles direkt abzurufen.

Wenn beide Eingaben auf der Seite zu finden sind, bereiten Sie sich darauf vor, mit ihnen zu interagieren, wie es ein echter Benutzer tun würde:

if (usernameInput && passwordInput) {
  // interaction...
}

Wunderbar! Es ist nun an der Zeit, diese Eingaben so auszufüllen, als wären Sie ein echter Benutzer.

Schritt #4: Konfigurieren Sie die Puppeteer-Humanize-Tippfunktion

Importieren Sie zunächst die Funktion typeInto aus puppeteer-humanize:

import { typeInto } from "@forad/puppeteer-humanize";

Konfigurieren Sie dann eine menschenähnliche Interaktion beim Ausfüllen von Formularen, wie unten gezeigt:

const typingConfig = {
  mistakes: {
    chance: 10, // 10% chance of introducing a typo that gets corrected
    delay: {
      min: 100, // minimum delay before correcting a mistake (in ms)
      max: 500, // maximum delay before correcting a mistake (in ms)
    },
  },
  delays: {
    all: {
      chance: 100, // 100% chance to add delay between each keystroke
      min: 100, // minimum delay between characters (in ms)
      max: 200, // maximum delay between characters (in ms)
    },
  },
};

// strings to fill into the input elements
const username = "username";
const password = "password";

// apply the human-like typing logic to both inputs
await typeInto(usernameInput, username, typingConfig);
await typeInto(passwordInput, password, typingConfig);

Die obige Tippkonfiguration:

  • Gelegentlich werden Tippfehler eingebaut, die dann realistisch korrigiert werden – so wie es ein echter Benutzer tun würde.
  • Fügt zufällige Verzögerungen zwischen den einzelnen Tastenanschlägen hinzu und ahmt so die natürlichen Geschwindigkeitsschwankungen beim Tippen nach.

Dieses Verhalten lässt Ihre Automatisierung weitaus menschlicher erscheinen, was die Chancen einer Entdeckung durch UBA-Technologien verringert.

Großartig! Ihr Puppenspieler-Skript sollte sich jetzt viel mehr wie ein echter Mensch verhalten.

Schritt #5: Füllen Sie das Formular aus und machen Sie sich bereit für Web Scraping

Sie können das Formular jetzt mit dem unten stehenden Code ausfüllen:

const submitButton = page.locator("input[type=\"submit\"]");
await submitButton.click();

Bitte beachten Sie, dass das Anmeldeformular auf Quotes to Scrape nur eine Testseite ist. Im Detail können Sie mit Ihrem Benutzernamen und Passwort darauf zugreifen. Sobald Sie das Formular abschicken, werden Sie auf eine Seite weitergeleitet, die die Daten enthält, die Sie abrufen möchten:

Übermittlung des Anmeldeformulars

Zu diesem Zeitpunkt können Sie die reguläre Puppeteer-API verwenden, um die eigentliche Scraping-Logik zu implementieren:

// wait for the page to load
await page.waitForNavigation();

// scraping logic...

Der Schwerpunkt dieses Artikels liegt auf Puppeteer-humanize. Daher werden wir den Scraping-Teil hier nicht behandeln.
Wenn Sie sich für das Scraping von Daten aus Quotes to Scrape und den Export in CSV interessieren, lesen Sie unser vollständiges Tutorial über Web-Scraping mit Puppeteer.

Schritt #6: Alles zusammenfügen

Ihre script.js sollte jetzt enthalten:

import puppeteer from "puppeteer";
import { typeInto } from "@forad/puppeteer-humanize";

(async () => {
  // set up a new browser instance in headful mode
  const browser = await puppeteer.launch({
    headless: false, // set to false so you can watch the interaction
    defaultViewport: null,
  });
  const page = await browser.newPage();

  // visit the target page
  await page.goto("https://quotes.toscrape.com/login");

  // select the login form inputs
  const usernameInput = await page.$("input[name=\"username\"]");
  const passwordInput = await page.$("input[name=\"password\"]");

  // if they are not both null, interact with them
  if (usernameInput && passwordInput) {
    // configure the typing behavior
    const typingConfig = {
      mistakes: {
        chance: 10, // 10% chance of introducing a typo that gets corrected
        delay: {
          min: 100, // minimum delay before correcting a mistake (in ms)
          max: 500, // maximum delay before correcting a mistake (in ms)
        },
      },
      delays: {
        all: {
          chance: 100, // 100% chance to add delay between each keystroke
          min: 100, // minimum delay between characters (in ms)
          max: 200, // maximum delay between characters (in ms)
        },
      },
    };

    // test strings to fill into the input elements
    const username = "username";
    const password = "password";

    // apply the human-like typing logic to both inputs
    await typeInto(usernameInput, username, typingConfig);
    await typeInto(passwordInput, password, typingConfig);

    // submit the form
    const submitButton = page.locator("input[type=\"submit\"]");
    await submitButton.click();

    // wait for the page to load
    await page.waitForNavigation();

    // scraping logic...
  }

  // close the browser and release its resources
  await browser.close();
})();

Starten Sie das obige Puppeteer-Humanize-Skript mit:

node script.js

Das Ergebnis wird sein:

Beachten Sie, wie natürlich die Interaktion beim Tippen ist

Wie Sie sehen können, interagiert der Puppeteer-Bot jetzt viel natürlicher mit dem Anmeldeformular – so wie es ein echter menschlicher Benutzer tun würde. Er tippt in einer realistischen Geschwindigkeit, macht gelegentlich Tippfehler und korrigiert sie dann. Das ist die Stärke von Puppeteer - menschlich sein!

Herausforderungen bei diesem Ansatz des Web Scraping

puppeteer-humanize ist definitiv ein großartiger Verbündeter, um die Wahrscheinlichkeit zu verringern, von Technologien entdeckt zu werden, die das Nutzerverhalten analysieren. Dennoch gehen Anti-Scraping-, Anti-Scraping- und Anti-Bot-Techniken weit über das Nutzerverhalten hinaus!

Bedenken Sie zunächst, dass Puppeteer den Browser instrumentieren muss, um ihn programmatisch zu steuern. Das führt zu subtilen Änderungen und Zeichen, die den Browser als automatisiert entlarven können. Um diese Lecks zu reduzieren, sollten Sie auch die Verwendung von Puppeteer Stealth in Betracht ziehen.

Auch mit Puppeteer-humanize und Puppeteer Stealth können Sie bei Ihren Interaktionen immer noch auf CAPTCHAs stoßen. Werfen Sie in solchen Fällen einen Blick auf unseren Artikel zur Umgehung von CAPTCHAs mit Playwright.

Diese Tools und Anleitungen können Ihnen zwar dabei helfen, eine widerstandsfähigere Scraping-Einrichtung aufzubauen, aber viele der Umgehungen, auf die sie sich stützen, sind nicht von Dauer. Wenn Sie es mit Websites zu tun haben, die hochentwickelte Anti-Bot-Lösungen verwenden, verringern sich Ihre Erfolgschancen erheblich. Außerdem kann das Hinzufügen mehrerer Plugins den Speicher- und Festplattenverbrauch Ihres Systems erhöhen und die Skalierung erschweren.

An diesem Punkt liegt das Problem nicht in Puppeteer selbst, sondern in den Einschränkungen des von ihm gesteuerten Browsers. Der wirkliche Durchbruch kommt durch die Integration von Puppeteer mit einem Headful, Cloud-basierten Browser, der speziell für Web Scraping entwickelt wurde. Diese Lösung bietet integrierte Unterstützung für rotierende Proxys, erweiterte CAPTCHA-Lösungen, realistische Browser-Fingerabdrücke und vieles mehr. Das ist genau das, worum es bei der Browser-API von Bright Data geht!

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, warum Vanilla Puppeteer bei der Analyse des Benutzerverhaltens versagt und wie Sie dies mit puppeteer-humanize beheben können. Insbesondere haben Sie gesehen, wie Sie diesen Ansatz in einen Web-Scraping-Workflow durch ein Schritt-für-Schritt-Tutorial integrieren können.

Mit dieser Methode können Sie zwar einfache Anti-Bot-Systeme umgehen, aber eine hohe Erfolgsquote ist damit nicht garantiert. Das gilt insbesondere für das Scraping von Websites, die auf CAPTCHAs, IP-Sperren oder moderne, KI-gestützte Anti-Bot-Techniken setzen. Darüber hinaus kann die Skalierung dieser Einrichtung komplex sein.

Wenn Ihr Ziel darin besteht, dass sich Ihr Scraping-Skript – oder sogar ein KI-Agent – mehr wie ein echter Benutzer verhält, sollten Sie einen Browser verwenden, der speziell für diesen Anwendungsfall entwickelt wurde: Der Agent Browser von Bright Data.

Erstellen Sie ein kostenloses Bright Data-Konto, um auf unsere gesamte KI-fähige Scraping-Infrastruktur zuzugreifen!