Skip to main content

puppeteer

Expert Puppeteer automation covering headless Chrome, PDF generation, web scraping, and performance tracing. Use when generating screenshots/PDFs, automating browser interactions, or crawling JavaScript web apps.

Quellinformationen

Repository
G1Joshi/Agent-Skills
Letzte Quellaktivität
1. Oktober 2026 um 16:38
Erkannte Sprache von SKILL.md
Englisch
Sterne
14
Forks
2

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
puppeteer
description
Expert Puppeteer automation covering headless Chrome, PDF generation, web scraping, and performance tracing. Use when generating screenshots/PDFs, automating browser interactions, or crawling JavaScript web apps.
# Puppeteer Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the DevTools Protocol. ## When to Use - **Headless Chrome Automation & Scraping**: High-performance headless browser control for web scraping, automation, and crawling. - **Server-Side PDF & Screenshot Generation**: Rendering HTML templates into pixel-perfect PDFs and high-resolution screenshots. - **Single-Page App Prerendering**: Pre-rendering client-side SPAs into static HTML for SEO indexing. - **Chrome DevTools Protocol (CDP) Access**: Tapping directly into raw Chrome DevTools Protocol events, performance profiling, and heap snapshots. ## Quick Start ```javascript import puppeteer from "puppeteer"; (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto("https://developer.chrome.com/"); await page.pdf({ path: "dv.pdf", format: "A4" }); await browser.close(); })(); ``` ## Core Concepts ### Browser & Page Architecture over CDP Puppeteer manages Chrome processes over WebSocket connections using the Chrome DevTools Protocol: ```typescript import puppeteer from "puppeteer"; const browser = await puppeteer.launch({ headless: "new", args: ["--no-sandbox", "--disable-setuid-sandbox"], }); const page = await browser.newPage(); await page.setViewport({ width: 1920, height: 1080 }); await page.goto("https://example.com", { waitUntil: "networkidle0" }); ``` ### PDF Generation with CSS Print Styles Renders printable documents directly from HTML: ```typescript await page.pdf({ path: "invoice.pdf", format: "A4", printBackground: true, margin: { top: "20mm", bottom: "20mm", left: "15mm", right: "15mm" }, }); ``` ### Page Evaluation in Browser Context Executes JavaScript inside the browser context and serializes results back to Node: ```typescript const articleTitles = await page.evaluate(() => { return Array.from(document.querySelectorAll("h2.article-title")).map((el) => el.textContent?.trim(), ); }); console.log("Scraped Titles:", articleTitles); ``` ## Common Patterns ### PDF Generation with Clean Print Styles **Problem**: Screen styles and dynamic elements render poorly when converting web pages to PDFs. **Solution**: Emulate print media before generating high-res PDF: ```javascript import puppeteer from "puppeteer"; async function generateInvoicePdf(url, outputPath) { const browser = await puppeteer.launch({ headless: "new" }); const page = await browser.newPage(); await page.goto(url, { waitUntil: "networkidle0" }); await page.emulateMediaType("print"); await page.pdf({ path: outputPath, format: "A4", printBackground: true, margin: { top: "20mm", bottom: "20mm", left: "15mm", right: "15mm" }, }); await browser.close(); } ``` ## Best Practices **Do**: - Use `headless: 'new'`: Leverage Chrome's modern native headless mode for identical rendering to headful Chrome. - Always Close Browsers in `finally` Blocks: Wrap browser actions in `try/finally` to prevent orphaned Chrome zombie processes. - Block Unnecessary Assets during Scraping: Block images, fonts, and tracking scripts via `page.setRequestInterception(true)` to speed up scraping 3-5x. - Use `waitUntil: 'networkidle0'` for SPAs: Ensure all client-side JavaScript hydration requests finish before taking screenshots. **Don't**: - Pass raw browser DOM elements back to Node: Serialize return values to JSON or extract primitive values inside `page.evaluate()`. - Launch a new browser instance for every request: Reuse a single browser instance and create/close lightweight `page` contexts. - Run Chrome as root without sandboxing precautions: Follow secure Docker non-root user setup guidelines. ## Troubleshooting | Error | Cause | Solution | | :--------------------------------------------------------------------- | :------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------- | | `Error: Failed to launch the browser process!` | Missing shared library dependencies (libnss3, libasound2) in Linux environment. | Install required dependencies or use `chrome-aws-lambda` in serverless. | | `Execution context was destroyed, most likely because of a navigation` | Attempting to interact with an element after page redirected. | Re-query locator after `page.waitForNavigation()` resolves. | | `TimeoutError: Navigation timeout of 30000 ms exceeded` | Network request still open preventing `networkidle0`. | Use `networkidle2` or set custom timeout in `page.goto(url, { timeout: 60000 })`. | ## References - [Puppeteer Documentation](https://pptr.dev/)
Auf GitHub ansehen