https://github.com/puppeteer/puppeteer
JavaScript API for Chrome and Firefox
https://github.com/puppeteer/puppeteer
automation chrome chromium developer-tools firefox headless-chrome node-module testing web
Last synced: 3 days ago
JSON representation
JavaScript API for Chrome and Firefox
- Host: GitHub
- URL: https://github.com/puppeteer/puppeteer
- Owner: puppeteer
- License: apache-2.0
- Created: 2017-05-09T22:16:13.000Z (over 9 years ago)
- Default Branch: main
- Last Pushed: 2026-10-14T06:17:41.000Z (8 days ago)
- Last Synced: 2026-10-14T07:59:38.514Z (7 days ago)
- Topics: automation, chrome, chromium, developer-tools, firefox, headless-chrome, node-module, testing, web
- Language: TypeScript
- Homepage: https://pptr.dev
- Size: 1.46 GB
- Stars: 95,691
- Watchers: 1,204
- Forks: 9,589
- Open Issues: 271
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: docs/contributing.md
- License: LICENSE
- Security: SECURITY.md
- Support: docs/supported-browsers.md
Awesome Lists containing this project
- stars - puppeteer
- stars - puppeteer/puppeteer
- awesome-sdet-collection - Puppeteer - Node.js library for controlling Chrome via the DevTools Protocol. (UI & Browser Automation / .NET)
- awesome-tools - puppeteer - Headless Chrome Node.js API (GUI Automation / Snippets Manager)
- awesome-open-source-alternatives - puppeteer/puppeteer
- awesome-nodejs - puppeteer - Headless Chrome Node.js API.  (Repository / Automation & RPA)
- awesome-coffeescript - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (Web / Scraping and Crawling)
- awesome-performance-engineering - Puppeteer - ⭐🟢 Chrome DevTools Protocol API enabling programmatic access to performance traces and network interception. (Performance Testing / Browser & Frontend Performance)
- awesome-trevor - Puppeteer - Headless Chrome Node.js API (Programming / JavaScript)
- awesome-scrapers - Puppeteer
- gitcat - puppeteer
- awesome-nodejs - puppeteer - 无头 Chrome Node.js API。  (GIT 仓库 / 自动化)
- awesome-repositories - puppeteer/puppeteer
- awesome-naming - Puppeteer - A browser automation library. If the browser is the puppet, this is the puppeteer. (Tools, Applications, Libraries, Frameworks)
- awesome-rainmana - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (TypeScript)
- awesome-github-projects - puppeteer - JavaScript API for Chrome and Firefox ⭐95,680 `TypeScript` 🔥 (🛠️ Developer Tools)
- awesome-nodejs - puppeteer - Headless Chrome Node.js API (Uncategorized / Uncategorized)
- awesomeLibrary - puppeteer - Headless Chrome Node.js API (语言资源库 / typescript)
- AiTreasureBox - puppeteer/puppeteer - 11-09_92814_3](https://img.shields.io/github/stars/puppeteer/puppeteer.svg)|JavaScript API for Chrome and Firefox| (Repos)
- awesome-cyber-range-list - Puppeteer - level API to control headless Chrome or Chromium browsers for automated testing and scraping. (Infrastructure Tooling)
- awesome-starred-test - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (TypeScript)
- awesome-local-llm - puppeteer - a JavaScript API for Chrome and Firefox (Tools / Browser Automation)
- awesome-open-source-applications - Puppeteer - level API to control Chrome or Chromium over the DevTools Protocol. |  |  |  |  |  | (Back-End Development)
- awesome-docker - puppeteer/puppeteer
- awesome-ccamel - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (TypeScript)
- jimsghstars - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (TypeScript)
- awesome-nodejs - Puppeteer - Headless Chrome. (Packages / Testing)
- awesome-chrome-devtools - Puppeteer - High-level Node.js API for controlling Chrome over CDP and WebDriver BiDi. See also [awesome-puppeteer](https://github.com/transitive-bullshit/awesome-puppeteer). (Chrome DevTools Protocol / The big two automation libraries)
- awesome-typescript - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (Web / Scraping and Crawling)
- my-awesome-list - puppeteer
- awesome-nodejs-cn - Puppeteer - **star:89685** Headless Chrome ![star > 2000][Awesome] (包 / 测试)
- awesome-python-fa - **Puppeteer** - یک ابزار برای کنترل مرورگر Chrome یا Chromium از طریق پایتون. Puppeteer به شما این امکان را میدهد که به طور خودکار صفحات وب را بارگذاری کرده و دادهها را استخراج کنید. این ابزار به ویژه در استخراج داده از صفحات جاوااسکریپتدار مفید است. (📚 فهرست / وب اسکرپینگ)
- awesome-github-star - puppeteer
- stars - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (TypeScript)
- awesome-toolbox - Puppeteer
- stars - puppeteer/puppeteer - Node.js API for Chrome (TypeScript)
- awesome-pdf - Puppeteer - Node library for controlling Chrome. Can also generate PDFs. (Libraries / JavaScript)
- awesome-screenshot-tools - Puppeteer - Chrome headless browser automation by Google. The gold standard for screenshots. (Open Source Libraries)
- awesome-hacking-lists - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (TypeScript)
- awesome - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (<a name="TypeScript"></a>TypeScript)
- awesome-nodejs - Puppeteer - Headless Chrome. (Packages / Testing)
- fucking-awesome-nodejs - Puppeteer - Headless Chrome. (Packages / Testing)
- awesome-nodejs-tools - Puppeteer
- fucking-awesome-chrome-devtools - Puppeteer - High-level Node.js API for controlling Chrome over CDP and WebDriver BiDi. See also <b><code> 2583⭐</code></b> <b><code> 173🍴</code></b> [awesome-puppeteer](https://github.com/transitive-bullshit/awesome-puppeteer)). (Chrome DevTools Protocol / The big two automation libraries)
- awesome-starts - puppeteer/puppeteer - Headless Chrome Node.js API (TypeScript)
- awesome - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (TypeScript)
- awesomeness - Puppeteer - Headless Chrome Node.js API. (🧪 Testing / ☸️ Kubernetes)
- awesome - puppeteer/puppeteer - JavaScript API for Chrome and Firefox (TypeScript)
- awesome-list - puppeteer
README
# Puppeteer
[](https://github.com/puppeteer/puppeteer/actions/workflows/ci.yml)
[](https://npmjs.org/package/puppeteer)

> Puppeteer is a JavaScript library which provides a high-level API to control
> Chrome or Firefox over the
> [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) or [WebDriver BiDi](https://pptr.dev/webdriver-bidi).
> Puppeteer runs in the headless (no visible UI) by default
## [Get started](https://pptr.dev/docs) | [API](https://pptr.dev/api) | [FAQ](https://pptr.dev/faq) | [Contributing](https://pptr.dev/contributing) | [Troubleshooting](https://pptr.dev/troubleshooting)
## Installation
```bash npm2yarn
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](https://github.com/npm/rfcs/pull/868)), 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:
```bash npm2yarn
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`](https://github.com/ChromeDevTools/chrome-devtools-mcp),
a Puppeteer-based MCP server for browser automation and debugging.
Puppeteer also supports the experimental [WebMCP](https://pptr.dev/guides/webmcp) API.
## Example
```ts
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();
```