Appearance
Usage
Minimal Example
Launch a headless browser, open a page, and close it cleanly.
javascript
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://developer.chrome.com/');
await page.setViewport({ width: 1080, height: 1024 });
await browser.close();Save as example.mjs and run:
bash
node example.mjsScreenshot Example
javascript
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.setViewport({ width: 1280, height: 800 });
await page.screenshot({ path: 'screenshot.png', fullPage: true });
await browser.close();
console.log('Screenshot saved to screenshot.png');PDF Generation
javascript
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle2' });
await page.pdf({ path: 'page.pdf', format: 'A4' });
await browser.close();Connecting to a Remote Cloud Browser (puppeteer-core)
When using a cloud browser endpoint such as Steel or Browserbase, connect via their CDP WebSocket URL instead of launching locally:
javascript
import puppeteer from 'puppeteer-core';
const browser = await puppeteer.connect({
browserWSEndpoint: 'wss://connect.browserbase.com?apiKey=YOUR_KEY'
});
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();Replace the browserWSEndpoint with the URL provided by your cloud browser provider.
Headful Mode (visible browser window)
javascript
const browser = await puppeteer.launch({ headless: false });CommonJS vs ESM
Puppeteer ships as ESM. Use import syntax or set "type": "module" in your package.json. For CommonJS projects use dynamic import:
javascript
const { default: puppeteer } = await import('puppeteer');