Puppeteer 24.16 Test: Chrome-zentrierte Browser-Automatisierung ohne Crawl-Orchestrierung

Zuletzt aktualisiert am August 18, 2026
Puppeteer 24.16 Test: Chrome-zentrierte Browser-Automatisierung ohne Crawl-Orchestrierung
KI-Zusammenfassung
Puppeteer ist Googles Node-Bibliothek, mit der sich ein echter Chrome direkt aus JavaScript steuern lässt — Sie schreiben die Automatisierung, das Chrome DevTools Protocol überträgt die Befehle, und ein vollständiger Browser rendert die Seite, bevor Sie überhaupt ein Byte davon auslesen. Das Projekt liegt auf GitHub unter puppeteer/puppeteer: Apache-2.0-lizenziert, in TypeScript geschrieben und bei rund 95,3k Sternen (95.307 an dem Tag, an dem ich den Snapshot gezogen habe). Die offizielle Positionierung ist bewusst eng gefasst: „a JavaScript API to control Chrome (and experimentally Firefox)“ — das zeigt, was es ist, und ebenso nützlich, was es nicht ist.

Puppeteer ist Googles Node-Bibliothek, mit der du einen echten Chrome direkt aus JavaScript steuern kannst — du schreibst die Automatisierung, das Chrome DevTools Protocol überträgt die Befehle, und ein vollständiger Browser rendert die Seite, bevor du überhaupt ein Byte daraus ausliest. Das Projekt liegt auf GitHub unter puppeteer/puppeteer: Apache-2.0-lizenziert, in TypeScript geschrieben und zum Zeitpunkt meines Snapshots bei rund 95,3k Sternen (95.307 an dem Tag, an dem ich die Daten gezogen habe). Die offizielle Positionierung ist bewusst eng gefasst: „a JavaScript API to control Chrome (and experimentally Firefox)“ — das sagt ziemlich klar, was es ist, und genauso nützlich auch, was es nicht ist.

Ich habe Puppeteer 24.16.0 mit demselben Fixture-Server und denselben öffentlichen Demos getestet, die wir für jede Browser-Automatisierungsbibliothek verwenden: ein statischer Katalog mit Pagination, ein Artikel, ein per JavaScript gerenderter Katalog, eine JSON-API, ein Endpunkt mit 500-Status, ein kleiner Crawl-Graph sowie Books to Scrape und Quotes to Scrape. Die Rendering-Aufgabe hat es sauber und ohne großes Aufsehen erledigt. Was es mir außerdem auf den Tisch gelegt hat, war genau die eine Aufgabe, die jede Headless-Browser-Bibliothek übrig lässt — und offen über diese Lücke zu sprechen, ist ein wesentlicher Unterschied zwischen einem brauchbaren Testbericht und einer Marketingmeldung.

Eine Zahl fiel mir stärker auf als die Recall-Werte. Auf einer Seite, deren Daten aus einem JSON-Endpunkt stammen, holte Puppeteer alle 8 Datensätze ohne überhaupt das DOM zu scrapen — es führte fetch innerhalb der Seite aus und las das Response-Objekt direkt aus. Zusammen mit nativem Rendering und funktionierenden Screenshots zeigt das ziemlich gut, wofür das Tool gebaut ist: ein ausgereifter Chrome-Renderer, kein Crawler-Framework. Und genau dieser Unterschied zählt, noch bevor du die erste Zeile Code schreibst.

Was Puppeteer eigentlich ist — und womit es konkurriert

Die Einordnung ist hier wirklich entscheidend, also fangen wir damit an. Puppeteer ist eine Browser-Automatisierungsbibliothek. Es startet Chrome, öffnet Seiten, lässt das JavaScript der Seite laufen und gibt dir das gerenderte Ergebnis zum Auslesen oder für Screenshots zurück. Genau deshalb greift man dafür statt zu einem HTTP-Client plus HTML-Parser: Du willst die Seite nachdem ihre Skripte ausgeführt wurden, nicht die leere Hülle, die der Server zuerst ausliefert.

In seiner Rolle konkurriert Puppeteer mit anderen echten Browser-Bibliotheken — Playwright und Selenium — nicht mit Crawler-Frameworks wie Scrapy oder mit LLM-Markdown-Tools. Wenn du Puppeteer auf tausend URLs ansetzt und erwartest, dass es die Warteschlange verwaltet, Duplikate entfernt, höflich drosselt und ein Dataset schreibt, dann bringst du einen Renderer für ein Crawling-Problem mit. Jede Seite wird zwar schön gerendert, aber die Orchestrierung übernimmt es nicht. (Das ist eine bewusste Eingrenzung, kein Fehler — ich komme gleich darauf zurück, weil genau das die wichtigste Erkenntnis vor dem Einsatz des Tools ist.)

System diagram: Browser Automation Is Not a Crawler

Puppeteer stammt aus Googles Chrome-Team, deshalb ist es von Anfang an Chrome-first und seine API liest sich wie ein schlankes, gut eingespieltes Interface über das Debugging-Protokoll des Browsers. Es ist alt genug, um im besten Sinn unspektakulär zu sein: Die Methoden, die man braucht, sind seit Jahren stabil, die Dokumentation ist gründlich, und das Ökosystem dahinter ist sehr reif.

Natives Rendering und ein In-Page-Fetch-Muster

Zwei Verhaltensweisen sind aus der Ergebnistabelle besonders erwähnenswert, weil sie sehr gut zeigen, wie man das Tool in der Praxis einsetzt.

Erstens: natives Rendering. Der per JavaScript gerenderte Katalog — eine Seite, die ihr Produktgrid erst nach dem Laden clientseitig aufbaut — lieferte 8/8 und speicherte einen Vollseiten-Screenshot auf der Festplatte. Das Setup war minimal, beinhaltete aber das Warten auf den Zielinhalt nach goto. Auch die öffentliche Quotes-to-Scrape-JS-Seite gab alle zehn Zitate mit demselben Muster zurück. Das sind Fixture-Ergebnisse, kein allgemeiner Rendering-Recall-Score.

Zweitens: Das JSON-API-Fixture lud Produkte von /api/dynamic-products. Ein same-origin-fetch über page.evaluate lieferte alle acht Datensätze zurück, ohne gerenderte Zeilen zu parsen. Das ist ein allgemeines Browser-Evaluationsmuster, keine Puppeteer-exklusive Erkennungsfunktion. Es kann die Extraktion vereinfachen, wenn Endpunkt und Request-Vertrag bekannt sind; Auth-Header, Laufzeit-Tokens, Berechtigungen, CORS/CSP, Service Worker und Pagination können jedoch weiterhin dazu führen, dass ein Anwendungsrequest anders ausfällt.

Die dritte Erkenntnis, die man mitnehmen sollte, ist nicht eine Zahl, sondern die Einordnung: Puppeteer ist ein ausgereifter Chrome-Renderer und kein Crawler. Beides stimmt — und der zweite Teil ist der, den viele Berichte unterschlagen.

Wie Puppeteer mit Chrome spricht

System diagram: How Puppeteer Talks to Chrome

In Chrome nutzt Puppeteer das Chrome DevTools Protocol (CDP), also den JSON-over-WebSocket-Kanal, den auch die Browser-DevTools verwenden. puppeteer.launch() startet Chrome und öffnet diese Protokollverbindung; Aufrufe wie goto, $$eval und screenshot machen Browserfunktionen über eine höherstufige API zugänglich. Die Firefox-Unterstützung folgt dem weiter unten beschriebenen WebDriver-BiDi-Weg, daher ist nicht jede Puppeteer-Operation universell ein CDP-Befehl.

page.evaluate führt eine Funktion im Kontext einer Seite aus, daher nutzt ein relatives fetch('/api/...') die Origin dieser Seite und kann zulässige Cookies sowie Session-State wiederverwenden. Es bildet jedoch nicht automatisch vom Anwendungs-Code gesetzte Authorization-Header, Request-Optionen, Tokens oder Service-Worker-Verhalten nach. In diesem same-origin-Fixture lieferte es JSON direkt zurück; echte Produktions-Requests müssen gegen ihren tatsächlichen Vertrag geprüft werden.

Das ist auch der Grund, warum Puppeteer schwerer ist. Jede Seite ist ein echter Browser-Tab mit einer echten Rendering-Engine darunter. Das bringt Korrektheit auf JavaScript-lastigen Seiten, kostet aber Speicher und Startzeit im Vergleich zu einem reinen HTTP-Fetch. Es gibt kein Gratis-Rendering; CDP macht die Kosten nur transparent.

Die Engine-Frage, klar und ohne Beschönigung

Es gibt die verbreitete Kurzfassung, Puppeteer sei „nur Chrome“. Für die Version, die ich getestet habe, stimmt das so nicht — und diese Korrektur verändert den Vergleich.

EngineWie Puppeteer 24.16.0 sie steuertIn diesen Tests genutzt
ChromeChrome-first über CDP — Standard, daher laufen bestehende Automationen weiterja
FirefoxDokumentierte Unterstützung über WebDriver BiDi seit v23nein
WebKitWird gar nicht gesteuert

Sowohl Chrome for Developers als auch Mozilla haben den Firefox-Schritt zum Zeitpunkt des Releases dokumentiert. Der Build, den ich genutzt habe, 24.16.0, liegt deutlich über v23, daher ist „nur Chrome“ eine zu enge Beschreibung dessen, was tatsächlich ausgeliefert wird. Das Fehlen von WebKit und die im Vergleich zu Playwright noch junge Cross-Engine-Geschichte sind die eigentliche Reichweiten-Differenz — nicht „eine Engine versus drei“.

Der Firefox/BiDi-Pfad ist dokumentiert und in der getesteten Version verfügbar, aber ich habe meine Fixtures nicht darüber laufen lassen. Ich berichte daher über eine Fähigkeit, nicht über eine Messung. Wenn Firefox für deine Ziele geschäftskritisch ist, prüfe das an deinen eigenen Seiten, bevor du dich festlegst. Wer den vollen Vergleich bei Engine- und Sprachumfang möchte: Unser Playwright-vs-Puppeteer-Vergleich jagt beide Bibliotheken durch dieselben Tests und klärt dort die Frage „welches Tool“; hier geht es ausschließlich um Puppeteer.

Installation und Setup in der Praxis: Der Browser ist der schwere Teil

Der Standardpfad npm install puppeteer lädt einen kompatiblen Chrome-for-Testing-Build herunter. Dieses Verhalten kann über Konfiguration übersprungen oder umgeleitet werden, und man kann Puppeteer auf ein anderes Executable zeigen, sodass die Versionsabstimmung von der Deploy-Entscheidung abhängt. Der Browser-Download war der schwerste Teil dieser Installation; ein Snapshot aus dem Paketmanager ist dabei nicht als dauerhafte Sicherheitsaussage zu verstehen.

Dieses automatische Bündeln ist ein echter Komfortgewinn, aber auch ein echter Footprint-Nachteil — und beide Seiten sollten benannt werden. Der Vorteil: Du musst keinen kompatiblen Browser suchen und keine Versionen manuell festnageln; npm install liefert ein funktionierendes Paar. Der Nachteil: Du lädst einen Browser herunter, also musst du Speicherplatz und Bandbreite dafür einplanen, vor allem in CI, wo ein kalter Cache diesen Preis auf jedem frischen Runner bezahlt.

Das ist auch ein echter Kontrast zu Playwright, das beide Schritte trennt — erst die Bibliothek installieren, dann separat npx playwright install ausführen, um die Browser-Builds zu laden. Keine der beiden Varianten ist wirklich schmerzhaft; sie scheitern nur unterschiedlich. Puppeteers Ein-Befehl-Ansatz kann dich auf einer getakteten Verbindung mit der Größe überraschen, während Playwrights zweiter Schritt gern vergessen wird. Man sollte wissen, welchen Weg man gerade nutzt.

Praktische Ergebnisse

Measured results chart: Three data paths exercised

Alle Tests liefen gegen einen lokalen Fixture-Server auf 127.0.0.1 sowie zwei öffentliche Übungsseiten, auf Node v22.22.3, macOS arm64, mit Puppeteer 24.16.0 und dem mitgelieferten Chrome. Die Ground Truth für jedes Fixture wurde vor dem Lauf festgehalten, sodass der Recall gegen einen festen Erwartungswert gemessen wird und nicht gegen das, was Puppeteer zufällig ausgegeben hat.

Das öffentliche Forschungspaket enthält den Fixture-Server, den Test-Runner und die Ground Truth. Der Dependency-Lock und die rohe Laufzusammenfassung wurden bewusst aus dem Veröffentlichungspaket herausgelassen, weil die strenge Sicherheitsprüfung Dependency-Lock-Daten und umgebungsspezifische Endpunkt-Materialien abgelehnt hat. Um das sichere lokale Fixture zu reproduzieren, führst du npm install aus und dann node run_puppeteer_material_tests.mjs innerhalb von tools/puppeteer/tests; vergleiche anschließend das Ergebnis mit der veröffentlichten Ground Truth. Öffentliche Demo-Seiten können sich ändern, daher ist das lokale Fixture die stabile Basis für die Prüfungen auf erwartete Trefferzahlen.

Für eine exakte historische Rekonstruktion der Abhängigkeiten solltest du lokal eine frische Lockfile erzeugen und auditieren, statt eine unveröffentlichte Lockfile als öffentlichen Beleg zu behandeln.

TestZielErgebnis
Statischer Katalog + Paginationlokales Fixture12/12, Recall 1.0
Artikel-Extraktionlokales FixtureTitel + 3/3 Absätze, Boilerplate getrennt
Dynamische JS-Seite (natives Rendering)lokales Fixture8/8, Recall 1.0, Vollseiten-Screenshot gespeichert
Dynamische JSON-API (In-Page-fetch)lokales Fixture8/8, Recall 1.0, kein DOM-Scraping
HTTP-500-Behandlunglokales FixtureStatus 500 einsehbar, kein Throw
Crawl-Graph (manuelles BFS)lokales Fixture12 Seiten, Tiefen {0:1, 1:4, 2:7}
Books to Scrapeöffentliche Demo20 Produkte
Quotes JSöffentliche Demo10 Zitate, nativ gerendert

Einige dieser Punkte verdienen noch einen Satz zusätzlich zur Tabelle.

Der selbst geschriebene Pagination-Code hat alle 12 erwarteten Katalogeinträge wiederhergestellt. Der Artikel-Selektor holte den Titel und drei erwartete Textabsätze; die umliegende Boilerplate blieb im DOM verfügbar. Puppeteer lieferte das gerenderte DOM, während die Selektor-Logik — nicht Puppeteer selbst — definierte, was als Artikelinhalt zählt.

Beim getesteten HTTP-500-Endpunkt gab goto ein Response-Objekt mit einem einsehbaren 500-Status zurück und warf keine Exception. Das sagt allerdings nichts über Timeouts, DNS-Fehler, Browser-Crashes, abgetrennte Frames oder andere Navigationsfehler aus — die brauchen weiterhin explizites Handling.

Der Crawl-Graph ist der Punkt, an dem die ganze Geschichte sichtbar wird. Das Folgen der internen Links des Fixtures zu 12 Seiten und das Verfolgen der Tiefe, damit URLs nicht erneut besucht werden, erforderte eine manuell geschriebene Breadth-First Search — denn Puppeteer hat keine eingebaute Crawl-Warteschlange. Es fand alle 12 Seiten über die Tiefen {0:1, 1:4, 2:7}, was im Klartext heißt: Mein BFS hat funktioniert. Aber das BFS kam von mir. Puppeteer rendert nur die Seiten; die Logik, die die Website abläuft, war selbst geschriebener Code. Für zwölf Seiten sind das ein Dutzend Zeilen und kein großes Thema. Für tausende URLs mit Deduplizierung, Retries und höflichen Verzögerungen wird aus diesem Dutzend Zeilen ein Projekt.

Eine Warnung wiederhole ich bewusst, weil sie leicht missbraucht wird: Die Artefakte enthalten Laufzeiten pro Test, aber das sind Einzelmessungen auf einer einzelnen Maschine, keine Benchmarks. Ich bewerte Puppeteers Geschwindigkeit nicht anhand eines Laptops und eines Durchlaufs. Was die Zahlen wirklich stützen, ist Recall und Verhalten über acht verschiedene Seitentypen hinweg — nicht eine Stoppuhr-Aussage.

Was ich nicht getestet habe

Damit die Ergebnisse nicht größer gelesen werden, als sie sind, hier die Punkte, die außerhalb des Testlaufs und damit außerhalb dieser Zahlen geblieben sind:

Außerhalb des TestlaufsStatus
Firefox via WebDriver BiDiDokumentiert, in 24.16.0 verfügbar, hier nicht ausgeführt
Proxying und Request InterceptionNicht getestet; beides wird unterstützt, aber ich habe es nicht ausgeführt
Parallele Seiten im großen MaßstabIch habe klein getestet; das Verhalten einer Browser-Flotte unter echter Parallelität wurde nicht gemessen
Neuausführung auf der neuesten VersionIch habe 24.16.0 getestet; npm latest ist 25.3.0, also eine ganze Major-Version weiter, Stand 2026-07-09. Die von mir genutzten APIs (launch, goto, $$eval, screenshot, In-Page-fetch) sind über 24→25 stabil, aber sauber wäre es, vor belastbaren Aussagen auf 25.3.0 erneut zu testen

Nichts davon ist ein Vorwurf. Das sind schlicht die Grenzen dessen, was ein einzelner Fixture-Lauf ehrlich beanspruchen kann.

Vor- und Nachteile

Vorteile:

  • Natives JavaScript-Rendering mit explizitem Warten auf Inhalte: 8/8 im dynamischen Fixture und alle zehn Zitate in der öffentlichen Demo, inklusive Screenshots.
  • Der selbst geschriebene Pagination- und Artikel-Selektor hat die erwarteten Fixture-Elemente korrekt wiederhergestellt.
  • In-Page-fetch hat alle acht Datensätze vom bekannten same-origin-Endpunkt ohne DOM-Parsing zurückgegeben.
  • Der getestete HTTP-500-Fall kam als inspizierbare Response ohne Exception zurück.
  • Die Standardinstallation lädt einen kompatiblen Chrome-for-Testing-Build; alternative Executables und Skip-Download-Konfigurationen bleiben möglich.
  • Reife, Chrome-orientierte API über CDP, tiefes Ökosystem und gründliche Doku. Apache-2.0.
  • Breiter als sein Ruf: dokumentierte Firefox-Unterstützung via WebDriver BiDi seit v23.

Nachteile:

  • Keine eingebaute Crawl-Warteschlange, kein Dataset-Writer und kein Throttling — Crawl in größerem Maßstab braucht eigenen Code oder einen Wrapper.
  • Keine WebKit-Engine und eine jüngere Cross-Engine-Geschichte als Playwright.
  • Das Gewicht eines echten Browsers: ein mitgeladener Chrome zum Herunterladen und ein Speicherverbrauch pro Seite im Vergleich zu HTTP-only-Tools.
  • Node-basiert; wer es aus einer anderen Sprache nutzen will, muss eine Brücke bauen und pflegen.
  • Die von mir getestete Version (24.16.0) liegt gegenüber dem npm-Latest (25.3.0) um eine Major-Version zurück — vor exakten Aussagen auf aktuellem Stand erneut prüfen.

Für wen es geeignet ist — und wer besser die Finger davon lässt

Greif zu Puppeteer, wenn du in Node arbeitest, deine Ziele in Chrome sauber gerendert werden (die meisten tun das) und du eine reife, fokussierte Bibliothek willst, die „die Seite nach der JavaScript-Ausführung“ les- und screenshotfähig macht. Für das Scraping einer Reihe dynamischer Seiten, das Abholen einer JSON-API mit der eigenen Session der Seite oder das Speichern gerenderter Screenshots als Beleg ist es ein sehr starker, unaufgeregter Standard. Die Firefox-via-BiDi-Option ist da, falls du sie später brauchst, und das Ökosystem sorgt dafür, dass die meisten Probleme, auf die du stößt, schon einmal jemand hatte.

Überleg zweimal, wenn dein Problem eher in der Crawl-Orchestrierung als im Rendering liegt. Wenn du Hunderte oder Tausende URLs mit Deduplizierung, Retries und Rate Limits durchlaufen musst, zwingt dich Puppeteer allein dazu, einen Crawler von Hand neu zu bauen — dafür ist es auf der falschen Abstraktionsebene. Vermeide einen Headless Browser komplett, wenn deine Seiten gar kein JavaScript brauchen, um ihre Daten freizugeben; wenn ein HTTP-Request plus Parser den Inhalt liefert, ist ein echter Browser teurer Overkill, der nur Speicher und Setup-Zeit verbrennt. Und wenn du WebKit-Treue oder einen Client in einer Nicht-JavaScript-Sprache brauchst, ist das hier nicht das richtige Werkzeug.

Alternativen und wo Thunderbit hineinpasst

Die ehrliche Einordnung zuerst: Puppeteer ist kostenlos, Apache-2.0-lizenziert, selbst gehostet, und du verantwortest alles daran — die Browser-Flotte, den Crawl-Code, den du oben draufsetzt, und den fortlaufenden Anti-Bot-Wettlauf. Für viele Projekte ist genau diese Verantwortung richtig, und kein Managed Service rendert eine autorisierte Seite günstiger als ein Browser, den du ohnehin schon hast.

Im Open-Source-Bereich vergleicht man am besten nach Aufgabe, nicht nach Logo. Für Crawl in größerem Maßstab ist Crawlee der naheliegende Begleiter: Sein PuppeteerCrawler erweitert Puppeteer um Request-Queue, Dataset und Throttling, die die Bibliothek absichtlich nicht mitbringt — du behältst also das Rendering und bekommst die Orchestrierung dazu. Wenn dein Ziel eher sauberes Markdown für eine LLM-Pipeline als ein gerendertes DOM ist, steuert Crawl4AI einen echten Browser und erzeugt genau das. Wenn deine Seiten gar keinen Browser brauchen, ist ein HTTP-first-Framework wie Scrapy eine andere, leichtere Kategorie. Wenn du mehrere dieser Optionen parallel bewertest, ordnet unser Open-Source-Scraper-Überblick die Kategorien sauber nebeneinander ein.

Ein Managed Service wie Thunderbit verlagert Browserbetrieb und Extraktion hinter eine API. Er wurde nicht mit diesen Puppeteer-Fixtures getestet, daher erhebt dieser Bericht keinen Vergleichsanspruch zu Rendering, Blockierung, Extraktionsqualität oder Kosten. Die Entscheidungsgrenze ist die operative Verantwortung: Browser- und Crawl-Code selbst warten oder einen Anbieter dafür bezahlen, einen Teil dieser Schicht zu betreiben.

Mit Puppeteer fällt keine Nutzungsgebühr an den Anbieter an, aber Compute, Bandbreite, Browser-Wartung, Orchestrierung und Betrieb bleiben bei dir. Ein Managed-Ansatz berechnet Nutzung und verschiebt einen Teil dieser Verantwortung zum Provider. Dieses Experiment hat die Ergebnisse nicht direkt miteinander verglichen.

Thunderbit für Webdaten-Extraktion testen

Fazit

Puppeteer 24.16.0 ist eine gute Wahl, wenn du in Node arbeitest und Chrome-first Browser-Automatisierung brauchst. Der selbst geschriebene Fixture-Code holte 12 statische Einträge, acht dynamische Einträge und zehn Zitate aus der öffentlichen Demo; die bekannte same-origin-API lieferte über page.evaluate acht Datensätze; Screenshots funktionierten; und der getestete HTTP-500-Fall blieb inspizierbar. Diese Ergebnisse gelten für die genannten Fixtures und eine ältere Major-Version, nicht pauschal für die Extraktionsqualität insgesamt.

Ordne die Aussagen aber richtig ein. Puppeteer ist ein Renderer, kein Crawler: Mein 12-Seiten-Durchlauf brauchte eine manuell geschriebene BFS, weil es keine eingebaute Queue gibt, und im großen Maßstab ist diese Lücke echte Arbeit — übergib sie an Crawlee oder bau die Mechanik selbst. Es ist Chrome-first mit dokumentierter Firefox-Unterstützung via BiDi, aber ohne WebKit, also nicht das Tool für breite Cross-Engine-Anforderungen. Es trägt das Gewicht eines echten Browsers. Und ich habe 24.16.0 gegen ein aktuelles 25.3.0 getestet, also solltest du vor belastbaren Aussagen auf dem aktuellen Stand erneut testen. Wenn du diese vier Punkte im Kopf behältst, ist Puppeteer eine exzellente Chrome-Automatisierungsbibliothek. Wenn du erwartest, dass es eine Website für dich crawlt, schreibst du am Ende den Crawler, den du eigentlich herunterladen wolltest.

Thunderbit für Webdaten-Extraktion testen Get Started Free

FAQs

Rendert Puppeteer JavaScript-Seiten, oder brauche ich ein Plugin? Es rendert sie nativ, ganz ohne Plugin. In meinem dynamischen Fixture lieferte es 8 von 8 clientseitig aufgebauten Produkten mit Recall 1.0 und einem Vollseiten-Screenshot, und die öffentliche Quotes-to-Scrape-JS-Seite gab auf dieselbe Weise alle 10 Zitate zurück — einfach goto ausführen und dann das gerenderte DOM auslesen. Weil Puppeteer einen echten Chrome über das DevTools Protocol steuert, werden die Skripte der Seite tatsächlich ausgeführt, bevor du etwas liest.

Kann Puppeteer eine JSON-API scrapen, ohne HTML zu parsen? Ja, wenn Endpunkt und Request-Vertrag das zulassen. page.evaluate kann eine Anfrage aus der Origin der Seite senden und möglicherweise zulässige Cookies wiederverwenden, bildet aber Anwendungs-Header, Tokens, Optionen oder Service-Worker-Verhalten nicht automatisch nach. Im same-origin-Fixture gab es alle acht Datensätze ohne DOM-Parsing zurück.

Ist Puppeteer ein Webcrawler? Nein — es ist eine Browser-Automatisierungsbibliothek, kein Crawler-Framework. Es gibt keine eingebaute Request-Queue, keinen Dataset-Writer und kein Throttling, daher brauchte mein 12-Seiten-Crawl (Tiefen {0:1, 1:4, 2:7}) eine manuell geschriebene Breadth-First Search. Das ist eine bewusste Eingrenzung, kein Defekt. Für Crawl in großem Maßstab kombiniert man es am besten mit einem Wrapper wie Crawlees PuppeteerCrawler, der Queue- und Dataset-Mechanik hinzufügt, die Puppeteer bewusst nicht mitliefert.

Ist Puppeteer nur für Chrome? Nicht mehr. Es ist Chrome-first über CDP, aber seit v23 gibt es dokumentierte Firefox-Unterstützung via WebDriver BiDi, und die von mir getestete Version (24.16.0) liegt deutlich darüber. Was es nicht steuert, ist WebKit, und seine Cross-Engine-Geschichte ist jünger als die von Playwright — das ist die korrekte Einschränkung, nicht „nur Chrome“. Hier habe ich nur Chrome verwendet, daher berichte ich Firefox-via-BiDi als dokumentierte Fähigkeit, nicht als von mir gemessene.

Was lädt die Installation von Puppeteer eigentlich herunter? Standardmäßig lädt npm install puppeteer einen kompatiblen Chrome-for-Testing-Build herunter. Der Download kann übersprungen oder umgeleitet werden, und ein anderes Executable lässt sich konfigurieren, daher hängt die Versionsabstimmung von der Deployment-Entscheidung ab. Plane Speicherplatz und Bandbreite für den Browser ein, besonders auf ungecacheten CI-Runnnern. Dieser Testbericht nutzte 24.16.0; führe die Kern-Fixtures auf der zum Veröffentlichungszeitpunkt aktuellen Version erneut aus.

Ke
Ke
CTO bei Thunderbit | Senior Data Scientist & ML-Experte Mit fast zehn Jahren Erfahrung in Machine Learning und Data Science ist Ke Shen Absolvent der Columbia University und ehemaliger Senior Data Scientist bei Walmart Labs. Mit tiefgreifender, von Fachkollegen anerkannter Expertise in Python, R, Java und Statistik teilt er praxiserprobte Einblicke dazu, wie sich komplexe KI-Algorithmen von der Theorie in eine produktionsreife Architektur überführen lassen.
Inhaltsverzeichnis
Thunderbit · KI-Web-Daten-Agent

Daten von jeder Seite in 1 Klick extrahieren

Vertraut von über 250.000 Nutzern
kostenloser Plan verfügbar
Von der Webseite zur Tabelle
Beschreibe einfach, was du brauchst — Thunderbits KI-Agent erfasst es und exportiert es nach Excel, Google Sheets, Airtable oder Notion. Kostenlos loslegen.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week