Discover / Automation
Puppeteer
by puppeteerTypeScript
Headless Chrome automation from Node.js. The base layer of countless scraping and testing stacks.
Maturity: stable because 9y old, puppeteer-core-v25.4.0 released 7d ago. Derived from release and commit history, not a rating.
- Stars
- 95k
- Forks
- 9.6k
- Downloads / mo
- —
- Last commit
- 2026-08-02
- License
- Apache-2.0
- Open issues
- 264
Market and trust evidence
Edition not yet matchedNo exact skills.sh identity match is available for this repository. Repository adoption and freshness remain visible above; install momentum is not inferred.
Trust analysis is a screening signal, not a security warranty. Read the ranking and trust methodology.
In practice
Written by AI from this repository’s README · medium confidenceTesting or scraping a JavaScript heavy page needs a real browser driven from code, not raw HTTP requests.
Use it when
When a Node script must render pages, capture output, or automate interactions in a real browser.
Not the right pick when
Modern package managers block install scripts, so the browser may not download and calls fail until you install it manually.
Capabilities
- high level API to control Chrome or Firefox
- headless by default with no visible UI
- puppeteer-core variant that skips the browser download
- locator API including aria and text selectors
- manual browser install via npx puppeteer browsers install
- pairs with chrome-devtools-mcp for agent driven automation
Requirements
- Node.js with a package manager
- install scripts allowed, or run npx puppeteer browsers install afterwards
Cost: Free and open source
Video walkthroughs
Build a Web Scraper API with Puppeteer
Is This the Future of UI Testing? Puppeteer + Claude AI's MCP 🧠🤯
Third-party YouTube uploads matched to this tool by title, channel and repository name on 2026-08-03. Not made, reviewed or endorsed by SkillPilot. View counts and publish months are as of the match date and the month is approximate. Nothing loads from YouTube until you press play.
What the repository ships
Detected from the actual files in the repository root.
Latest release puppeteer-core-v25.4.0
Published 2026-07-27
25.4.0 (2026-07-27)
🎉 Features
- add browser-level PWA install/launch/uninstall APIs (#15235) (4a48c8a)
- expose Explicit Resource Management (
using) (#15027) (a1ca86b) - expose handled getter on Dialog (#15225) (be6f726)
- roll to Chrome 151.0.7922.47 (#15237) (06442ae)
🛠️ Fixes
- combine duplicate BiDi response headers instead of overwriting (#15203) (16ec165)
- don't throw in checkVisibility for a detached text node (#15197) (89683ac)
- roll to Chrome 150.0.7871.115 (#15223) (3232cd4)
- roll to Chrome 150.0.7871.46 (#15196) (30d4100)
- roll to Chrome 150.0.7871.49 (#15220) (633d55d)
- roll to Firefox 152.0.5 (#15219) (5de975a)
Tags
README
Puppeteer
<img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" height="200" align="right"/>
Puppeteer is a JavaScript library which provides a high-level API to control
Chrome or Firefox over the
DevTools Protocol or WebDriver BiDi.
Puppeteer runs in the headless (no visible UI) by default
Get started | API | FAQ | Contributing | Troubleshooting
Installation
npm i puppeteer # Downloads compatible Chrome during installation.
npm i puppeteer-core # Alternatively, install as a library, without downloading Chrome.
:::note
Modern package managers (including npm (see the RFC), pnpm, Yarn, Bun, and Deno) block dependency install scripts by default. If the install script is blocked, Puppeteer will not download the browser during installation, leading to runtime errors.
You can manually download the required browsers after installation by running:
npx puppeteer browsers install
Alternatively, you can configure your package manager to allow the install script to run (for example, with npm, by adding "puppeteer" to "allowScripts" in your package.json).
:::
MCP
Install chrome-devtools-mcp,
a Puppeteer-based MCP server for browser automation and debugging.
Puppeteer also supports the experimental WebMCP API.
Example
import puppeteer from 'puppeteer';
// Or import puppeteer from 'puppeteer-core';
// Launch the browser and open a new blank page.
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Navigate the page to a URL.
await page.goto('https://developer.chrome.com/');
// Set the screen size.
await page.setViewport({width: 1080, height: 1024});
// Open the search menu using the keyboard.
await page.keyboard.press('/');
// Type into search box using accessible input name.
await page.locator('::-p-aria(Search)').fill('automate beyond recorder');
// Wait and click on first result.
await page.locator('.devsite-result-item-link').click();
// Locate the full title with a unique string.
const textSelector = await page
.locator('::-p-text(Customize and automate)')
.waitHandle();
const fullTitle = await textSelector?.evaluate(el => el.textContent);
// Print the full title.
console.log('The title of this blog post is "%s".', fullTitle);
await browser.close();