logo
languageDEdown
menu

Was ist Puppeteer? Der vollständige Guide für Web Scraping, Automatisierung und KI-Agenten (2026)

star

Was ist Puppeteer und wie unterscheidet es sich von Playwright und Selenium? Der vollständige Guide mit Praxisbeispielen, Performance-Daten und Puppeteer MCP für KI-Agenten.

8 Minuten lesen

Eine Preisseite lädt ihre Produkte per JavaScript nach, ein Dashboard zeigt Daten erst nach dem Login, ein Social-Feed lädt beim Scrollen automatisch weitere Beiträge nach. Ein einfacher HTTP-Request bekommt in allen drei Fällen nur ein leeres Gerüst zurück, nicht die eigentlichen Daten. Genau hier setzt Puppeteer an: Es steuert einen echten Browser per Code, lässt Seiten vollständig rendern und macht damit sichtbar, was eine reine HTTP-Anfrage nie zu sehen bekommt.

Puppeteer wird vom Chrome-Team bei Google entwickelt und zählt mit rund 12 Millionen wöchentlichen npm-Downloads zu den meistgenutzten Bibliotheken für Browser-Automatisierung im JavaScript-Ökosystem. Dieser Guide erklärt, wie es funktioniert, wie es im direkten Vergleich zu Playwright und Selenium abschneidet, wo es in der Praxis an Grenzen stößt, und wie es inzwischen auch KI-Agenten per MCP als Werkzeug zur Verfügung steht.

Auf einen Blick

Aktuelle Version25.9.0 (npm), veröffentlicht 25. August 2026
Entwickelt vonChrome-Team, Google
GitHub95.500+ Stars · 9.567 Forks · 445+ Contributors
npm-Downloads~12 Mio. pro Woche
LizenzApache-2.0
Sprache / LaufzeitJavaScript / TypeScript, Node.js ≥ 22.12
Unterstützte BrowserChrome und Firefox, über DevTools Protocol bzw. WebDriver BiDi
(Stand: 27. August 2026, Quelle: GitHub API / npm Registry)

Was ist Puppeteer?

Puppeteer ist eine Node.js-Bibliothek, die einen Chrome- oder Firefox-Browser per Code fernsteuert. Statt manuell zu klicken, übernimmt ein Skript diese Aufgabe: Seiten aufrufen, Formulare ausfüllen, scrollen, auf Elemente warten, Daten aus dem vollständig gerenderten DOM auslesen.

Vier Anwendungsfälle decken die meisten Puppeteer-Projekte ab:

Web Scraping: Daten aus Seiten extrahieren, die ihren Inhalt erst per JavaScript nachladen, etwa Preise, Produktlisten oder Social-Feeds.

End-to-End-Tests: Nutzerabläufe automatisiert durchklicken und prüfen, ob eine Anwendung nach einem Update noch funktioniert.

PDF- und Screenshot-Erzeugung: Seiten als PDF exportieren oder für Monitoring und Archivierung fotografieren.

Performance-Monitoring: Ladezeiten, Rendering-Metriken und Netzwerk-Requests einer Seite protokollieren.

Scraping ist damit einer von mehreren Anwendungsfällen, nicht der einzige — Puppeteer wurde ursprünglich für automatisierte Browser-Tests entwickelt, Scraping kam als Nutzung der Community dazu.

Wie funktioniert Puppeteer?

Puppeteer spricht nicht direkt mit der Webseite, sondern mit dem Browser selbst. Für Chrome läuft das über das Chrome DevTools Protocol (CDP), ein Low-Level-Protokoll, das Tabs öffnen, den DOM auslesen und Netzwerkverkehr abfangen kann. Für Firefox nutzt Puppeteer stattdessen WebDriver BiDi, einen neueren, browserübergreifenden Standard.

Headless vs. Headful: Im Headless-Modus läuft der Browser ohne sichtbares Fenster im Hintergrund — das ist die Standardeinstellung, schneller und der Regelfall auf Servern. Im Headful-Modus öffnet sich ein sichtbares Browserfenster, nützlich beim Debuggen, um zu sehen, was das Skript tatsächlich tut.

Installationnpm install puppeteer lädt zusätzlich zur Bibliothek eine passende Chromium-Version automatisch mit herunter — kein separater Browser-Download nötig, sofort lauffähig. Wer eine bereits installierte Chrome-Version nutzen will, greift stattdessen zu puppeteer-core.

Puppeteer vs. Playwright vs. Selenium: Der ehrliche Vergleich 2026

Alle drei Tools lösen im Kern dasselbe Problem — einen Browser per Code steuern —, aber mit unterschiedlicher Architektur, Reichweite und Reife. Die Zahlen unten stammen direkt aus der GitHub- und npm-API (Stand: 28. August 2026), nicht aus Marketingmaterial.

PuppeteerPlaywrightSelenium
Erstveröffentlichung201720202004
Entwickelt vonChrome-Team, GoogleMicrosoftSelenium-Projekt (Open Source)
ProtokollChrome DevTools Protocol (Chrome), WebDriver BiDi (Firefox)Chrome DevTools Protocol, eigene Protokolle für Firefox/WebKitW3C WebDriver Protocol
SprachenJavaScript/TypeScript offiziell; Pyppeteer (Python-Port) seit Feb. 2024 ohne UpdateJavaScript/TypeScript, Python, Java, .NET/C#Java, Python, C#, Ruby, JavaScript (offizielle Core-Bindings)
Browser-EnginesChromium, FirefoxChromium, Firefox, WebKit (Safari-Engine)Chrome, Firefox, Safari, Edge — jeder WebDriver-kompatible Browser
GitHub Stars95.500+95.250+34.400+
npm-Downloads/Woche~12,0 Mio.~86,4 Mio.~2,3 Mio. (nur JS-Binding, Python/Java-Nutzung separat und nicht vergleichbar)
Auto-WaitingVorhanden, in Einzelfällen manuelles Nachhelfen nötigEingebaut und robust — wartet automatisch auf Sichtbarkeit und InteraktivitätMuss explizit programmiert werden (WebDriverWait)
Paralleles TestenKein eingebautes Tool, selbst zu orchestrierenEingebauter Test-Runner mit paralleler AusführungSelenium Grid (separat aufzusetzen)
LizenzApache-2.0Apache-2.0Apache-2.0

Die npm-Downloads sind die aussagekräftigste Zahl in dieser Tabelle: Playwright wird inzwischen über siebenmal häufiger heruntergeladen als Puppeteer — ein Vorsprung, der sich in den letzten Jahren aufgebaut hat und den ältere Vergleichsartikel aus 2022 noch nicht abbilden. Für reines Chrome-Scraping im JS-Ökosystem bleibt Puppeteer eine solide, schlanke Wahl. Sobald Cross-Browser-Testing, mehrere Programmiersprachen im Team oder eingebaute Parallelisierung gebraucht werden, hat Playwright inzwischen die Oberhand. Selenium bleibt relevant für Teams mit gewachsenen Legacy-Testsuiten oder wenn Browser-Support über Chrome/Firefox/Safari hinaus gebraucht wird (z. B. ältere Edge-Versionen). Wer lieber in Python statt JavaScript arbeitet, findet die gleichen Grundprinzipien in unserem Guide zum Web Scraping mit Python.

Praxisbeispiel: Web Scraping mit Puppeteer

Das Grundmuster: Browser starten, Seite laden, auf das dynamisch nachgeladene Element warten, Daten aus dem DOM extrahieren.

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();

await page.goto('https://example.com/produkte', { waitUntil: 'networkidle2' });

// Auf ein per JavaScript nachgeladenes Element warten
await page.waitForSelector('.produkt-preis');

// Daten aus dem gerenderten DOM extrahieren
const preise = await page.$$eval('.produkt-preis', els =>
  els.map(el => el.textContent.trim())
);

console.log(preise);
await browser.close();

Screenshot und PDF laufen über dieselbe page-Instanz:

await page.screenshot({ path: 'seite.png', fullPage: true });
await page.pdf({ path: 'seite.pdf', format: 'A4' });

Infinite Scroll / Nachladen bei Scrollen, ein Muster, an dem viele Scraping-Skripte scheitern, weil die Seitenhöhe sich erst nach dem Laden ändert:

let vorherigeHoehe = 0;
while (true) {
  const aktuelleHoehe = await page.evaluate(() => document.body.scrollHeight);
  if (aktuelleHoehe === vorherigeHoehe) break;
  vorherigeHoehe = aktuelleHoehe;
  await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
  await new Promise(r => setTimeout(r, 1000));
}

Zum Ökosystem: Puppeteer rendert die Seite, ersetzt aber keinen HTML-Parser. Für die Nachbearbeitung von bereits geladenem HTML wird es häufig mit cheerio kombiniert (jQuery-artige Syntax, schneller als DOM-Manipulation im Browser); für einfache, nicht-JavaScript-Seiten reicht oft axios allein, ganz ohne Browser-Overhead. Puppeteer lohnt sich erst, wenn eine Seite ihren Inhalt tatsächlich per JavaScript nachlädt. Die Grundlagen des reinen HTML-Auslesens erklärt unser Leitfaden zum Auslesen von HTML-Code einer Website.

Skalierung und Performance: Was den Durchsatz wirklich begrenzt

Es gibt keinen offiziellen Puppeteer-Benchmark für “wie viele Seiten pro Stunde” — die Zahl hängt zu stark von Zielseite, Hardware und Netzwerk ab, um sie seriös zu verallgemeinern. Sinnvoller ist zu verstehen, was den Flaschenhals bildet.

Der teuerste Schritt ist nicht das Laden einer Seite, sondern das Starten eines neuen Browsers. Jeder Aufruf von puppeteer.launch() startet eine vollständige Chrome-Instanz — das kostet deutlich mehr Zeit und Arbeitsspeicher als das Öffnen eines weiteren Tabs. Die gängige Praxis: einen Browser offen halten und für jede Aufgabe nur eine neue page öffnen und wieder schließen. Tabs sind um ein Vielfaches günstiger als Prozesse.

Arbeitsspeicher ist typischerweise die begrenzende Ressource, nicht CPU. Jede offene Seite hält ihren eigenen Rendering-Kontext im Speicher — wie viele Seiten parallel laufen können, bevor der Prozess abstürzt, hängt davon ab, wie viel JavaScript und wie viele Bilder die Zielseite lädt, und wie viel RAM zur Verfügung steht. Es gibt keine feste Obergrenze, die für jedes Setup gilt.

Ein bekanntes Problem beim Betrieb in Docker-Containern: Das Standard-Shared-Memory-Limit vieler Container reicht für Chrome nicht aus und führt zu Abstürzen. Abhilfe schafft ein höheres --shm-size beim Containerstart oder das Chrome-Flag --disable-dev-shm-usage, das den Shared-Memory-Mechanismus umgeht.

Skalierung ist bei Puppeteer also eine Frage von Infrastruktur-Design — Browser-Pooling, Speicher-Monitoring, begrenzte Parallelität über eine Warteschlange — nicht von einer festen Obergrenze. Wer täglich zehntausende Seiten abgreifen will, braucht in der Praxis genau diese Architektur, kein einzelnes Skript, das alles gleichzeitig startet.

Anti-Bot-Erkennung und Proxys: Die Probleme, die niemand richtig löst

Headless-Browser hinterlassen Spuren, an denen Websites sie von echten Nutzern unterscheiden können. Puppeteer verwendet seit Version 22 standardmäßig den sogenannten “new Headless”-Modus — laut offizieller Dokumentation verhält sich der ältere Modus (chrome-headless-shell) gegenüber regulärem Chrome nicht vollständig gleich, ist dafür performanter. Der neue Modus ist näher am regulären Chrome-Verhalten; ob das die Erkennungsrate senkt, bestätigt die Doku nicht explizit, es ist naheliegend, aber keine offizielle Zusicherung.

Was Websites in der Praxis prüfen:

  • navigator.webdriver: Chrome setzt dieses Flag bei automatisierter Steuerung auf true — das einfachste und am häufigsten geprüfte Signal.
  • WebGL-Renderer-String: Umgebungen ohne echte GPU liefern häufig “SwiftShader” als Renderer zurück, ein Hinweis auf eine virtualisierte Umgebung.
  • Timing- und Verhaltensmuster: Mausbewegungen in perfekten Linien oder Formulareingaben ohne jede Verzögerung fallen Anti-Bot-Systemen eher auf als einzelne technische Flags.

Die gängige Lösung hat einen blinden Fleckpuppeteer-extra-plugin-stealth ist mit rund 1 Million wöchentlichen npm-Downloads das meistgenutzte Werkzeug gegen genau diese Signale — die letzte veröffentlichte Version stammt jedoch vom April 2023. Erkennungstechniken entwickeln sich seither weiter, das Plugin nicht im gleichen Tempo. Es senkt die Erkennungswahrscheinlichkeit, ist aber keine dauerhafte Garantie.

Proxys einbinden läuft über einen Start-Parameter, nicht pro Request:

const browser = await puppeteer.launch({
  args: ['--proxy-server=http://proxy-adresse:port'],
});
const page = await browser.newPage();
await page.authenticate({ username: 'user', password: 'pass' });

Ein einzelner Proxy pro Browser-Instanz reicht selten, wenn eine Zielseite nach wenigen Requests ein Rate-Limit setzt. Die IP innerhalb desselben Prozesses zu wechseln bedeutet in der Regel, für jede neue IP eine neue Browser-Instanz zu starten — teuer, siehe der vorige Abschnitt zu Skalierung. In der Praxis lösen kommerzielle Proxy-Anbieter das über ein einzelnes Gateway, das die austretende IP serverseitig bei jeder Anfrage rotiert; für Puppeteer sieht das von außen wie ein einziger, stabiler Proxy-Endpunkt aus.

Puppeteer und MCP: Wie KI-Agenten den Browser wirklich steuern

Model Context Protocol (MCP) ist ein offener Standard, mit dem ein KI-Agent externe Werkzeuge über eine einheitliche Schnittstelle aufrufen kann, statt dass jede Anwendung eine eigene Integration bauen muss. Für Puppeteer bedeutet das konkret: Ein MCP-Server verpackt die Browser-Steuerung als eine Reihe aufrufbarer Funktionen, die ein Agent wie Claude direkt nutzen kann, um selbstständig eine echte Website zu navigieren.

So sah die offizielle Referenzimplementierung aus (@modelcontextprotocol/server-puppeteer) — sie stellte sieben Funktionen bereit:

  • puppeteer_navigate — eine URL aufrufen
  • puppeteer_screenshot — die Seite oder ein einzelnes Element per CSS-Selektor fotografieren
  • puppeteer_click / puppeteer_hover — Elemente anklicken oder darüber hovern
  • puppeteer_fill / puppeteer_select — Formularfelder ausfüllen, Dropdown-Werte auswählen
  • puppeteer_evaluate — beliebiges JavaScript in der Seite ausführen

Angebunden wurde das über eine einzige Konfigurationszeile in Claude Desktop oder VS Code:

{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
    }
  }
}

Wichtig für die Einordnung: Dieser offizielle Server steht inzwischen im Repository modelcontextprotocol/servers-archived — laut Beschreibung des Repositories “Referenz-Server, die nicht mehr gepflegt werden”. Es gibt keinen einzelnen offiziellen Nachfolger, stattdessen eine Reihe von Community-Forks unterschiedlicher Reife. Der meistgenutzte, puppeteer-mcp-server von merajmehrabi, kommt auf rund 480 GitHub-Stars — spürbar mehr Zuspruch als die übrigen Forks, aber weit von einem etablierten Standard entfernt. Wer Puppeteer per MCP an einen Agenten anbinden will, wählt aktuell zwischen mehreren aktiv gepflegten, aber nicht offiziellen Implementierungen.

Ein Sicherheitshinweis aus der offiziellen Dokumentation, der ernst genommen werden sollte: Der Server läuft auf der lokalen Maschine und kann dadurch auch lokale Dateien und interne IP-Adressen erreichen. Gefährliche Start-Optionen wie --no-sandbox sind standardmäßig blockiert und müssen explizit über ein allowDangerous-Flag freigeschaltet werden.

Ein Agent, der Puppeteer per MCP steuert, umgeht dabei keines der vorherigen Probleme: Anti-Bot-Erkennung (Abschnitt 6) und Skalierungsgrenzen (Abschnitt 5) gelten identisch, ob ein Mensch das Skript schreibt oder ein Agent die Klicks in Echtzeit auslöst.

Grenzen von Puppeteer: Wann eigener Code an seine Grenzen stößt

Die einzelnen Probleme aus den vorherigen Abschnitten wirken für sich genommen lösbar. In Summe ergeben sie ein Muster, das für die meisten Puppeteer-Projekte irgendwann zur echten Kostenstelle wird:

Wartung ist keine einmalige Aufgabe. Ändert eine Zielseite ihr HTML-Layout, bricht ein Selektor-basiertes Skript — nicht selten, sondern regelmäßig, bei stark frequentierten Seiten mehrfach im Jahr. Jede Änderung bedeutet: Skript öffnen, Fehler finden, Selektoren anpassen, erneut testen.

Sicherheits- und Anti-Bot-Maßnahmen verfallen mit der Zeit. Der in Abschnitt 6 beschriebene Stealth-Plugin-Fall ist kein Einzelfall: Werkzeuge, die gegen Erkennungssysteme antreten, brauchen kontinuierliche Pflege, weil sich die Gegenseite weiterentwickelt. Ein Setup, das heute funktioniert, ist keine Garantie für nächstes Quartal.

Skalierung ist eine Infrastrukturentscheidung, keine Codezeile. Browser-Pooling, Speicher-Monitoring, Proxy-Rotation — das in Abschnitt 5 beschriebene Setup für größere Scraping-Jobs verlangt jemanden, der Server-Infrastruktur betreibt, nicht nur JavaScript schreibt.

Der MCP-Weg fügt eine weitere Entscheidung hinzu, statt eine zu ersparen. Wie Abschnitt 7 gezeigt hat, gibt es keine offiziell gepflegte Implementierung mehr, sondern mehrere Community-Forks — eine zusätzliche Wahl, die getroffen und im Blick behalten werden muss.

Für ein einzelnes, klar umrissenes Scraping-Projekt mit begrenzter Laufzeit ist das kein Problem. Für einen fortlaufenden Datenbedarf über mehrere Zielseiten hinweg — Preisbeobachtung, Lead-Listen, Marktdaten — verschiebt sich die eigentliche Aufgabe von “ein Skript schreiben” zu “ein kleines System betreiben”.

Puppeteer selbst betreiben oder eine Plattform nutzen?

Wer die in Abschnitt 8 beschriebene Wartung dauerhaft selbst tragen will oder aus Kontrollgründen muss, ist mit einem eigenen Puppeteer-Setup gut bedient — volle Kontrolle über jede Zeile Code.

Für die meisten Teams sieht der eigentliche Bedarf aber anders aus: verlässlich Daten aus JavaScript-basierten Seiten bekommen, ohne selbst Selektoren zu pflegen, Stealth-Maßnahmen aktuell zu halten oder Proxy-Infrastruktur zu betreiben. Genau diese Schicht deckt eine Plattform wie Octoparse ab — nicht als Ersatz für eigenen Code, sondern als gewartete Infrastruktur darunter: fertige, szenariospezifische Vorlagen für wiederkehrende Anwendungsfälle (E-Commerce-Preisdaten, Immobilien, Social Media, Lead-Generierung), dieselbe Rendering-Technik wie Puppeteer unter der Haube, dazu eine CLI und ein MCP-Server, über die sich Aufgaben auch programmatisch oder direkt von einem KI-Agenten in natürlicher Sprache auslösen lassen — ohne dass ein Team dafür, wie in Abschnitt 7 beschrieben, erst zwischen mehreren unoffiziellen Community-Forks wählen muss.

FAQ

Ist Puppeteer kostenlos?

Ja. Puppeteer steht unter der Apache-2.0-Lizenz, ist vollständig Open Source und kostet nichts — weder für die Bibliothek selbst noch für die mitgelieferte Chromium-Version. Kosten entstehen erst durch die Infrastruktur, auf der es läuft (Server, Proxys, Wartungsaufwand).

Puppeteer oder Selenium — was ist besser für Web Scraping?

Kommt auf das Setup an. Für reines Chrome-Scraping im JavaScript-Ökosystem ist Puppeteer die schlankere Wahl: einfachere Installation, kein zusätzliches WebDriver-Setup, eingebautes (wenn auch nicht perfektes) Auto-Waiting. Selenium lohnt sich, sobald mehrere Browser-Engines oder mehrere Programmiersprachen im Team eine Rolle spielen, oder wenn eine bestehende Selenium-Testsuite schon existiert. Die npm-Download-Zahlen (siehe Vergleichstabelle oben) zeigen allerdings, dass ein Großteil neuer Projekte inzwischen zu Playwright statt zu einem der beiden greift.

Kann man mit Puppeteer ohne Programmierkenntnisse arbeiten?

Nein. Puppeteer ist eine Node.js-Bibliothek — jede Automatisierung wird als JavaScript-Code geschrieben, es gibt keine grafische Oberfläche. Für dieselbe Aufgabe ohne eigenen Code bietet sich eine Plattform an, die dieselbe Rendering-Technik als fertige, gewartete Infrastruktur bereitstellt — inklusive CLI und MCP-Anbindung für Teams, die es doch programmatisch oder über einen KI-Agenten steuern wollen.

Was ist ein Puppeteer MCP Server?

Ein MCP-Server, der die Browser-Funktionen von Puppeteer (Navigation, Klicks, Formulare ausfüllen, Screenshots, JavaScript ausführen) als Werkzeuge bereitstellt, die ein KI-Agent wie Claude direkt aufrufen kann. Die ursprüngliche offizielle Implementierung wird nicht mehr gepflegt; aktuell im Einsatz sind mehrere von der Community betriebene Nachfolger.

Erhalte Webdaten in Klicks
Daten-Scraping von jeder Website ganz ohne Codierung.
Kostenloser Download

Starten mit Octoparse heute

Downloaden

Verwandte Artikel