Puppeteer quick start

To use Puppeteer in your project, you must first install it.

Installation

npm i puppeteer
# or "yarn add puppeteer"

When you install Puppeteer, it downloads a recent version of Chromium (~170MB Mac, ~282MB Linux, ~280MB Win) that is guaranteed to work with the API. To skip the download, download into another path, or download a different browser, see Environment variables .

puppeteer-core

Since version 1.7.0, we publish the puppeteer-core package. This version of Puppeteer doesn't download any browser by default.

npm i puppeteer-core
# or "yarn add puppeteer-core"

puppeteer-core is intended to be a lightweight version of Puppeteer for launching an existing browser installation or for connecting to a remote one. Be sure that the version of puppeteer-core you install is compatible with the browser you intend to connect to.

See puppeteer versus puppeteer-core .

Usage

Puppeteer follows the latest maintenance LTS version of Node.

Puppeteer is likely familiar to people using other browser testing frameworks. You create an instance of Browser , open pages, and then manipulate them with Puppeteer's API .

Save a screenshot

For example, to navigate to https://example.com and save a screenshot as example.png , save the following code to example.js .

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'example.png' });

  await browser.close();
})();

Puppeteer sets an initial page size to 800×600px, which defines the screenshot size. The page size can be customized with Page.setViewport() .

Create a PDF

Save file as hn.js .

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://news.ycombinator.com', {
    waitUntil: 'networkidle2',
  });
  await page.pdf({ path: 'hn.pdf', format: 'a4' });

  await browser.close();
})();

Execute script on the command line:

node hn.js

See Page.pdf() for more information about creating pdfs.

Evaluate script in the context of the page

Save file as get-dimensions.js :

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  // Get the "viewport" of the page, as reported by the page.
  const dimensions = await page.evaluate(() => {
    return {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight,
      deviceScaleFactor: window.devicePixelRatio,
    };
  });

  console.log('Dimensions:', dimensions);

  await browser.close();
})();

Execute script on the command line:

node get-dimensions.js

See Evaluate JavaScript for more information on evaluate and related methods such as evaluateOnNewDocument and exposeFunction .

Default runtime settings

Uses Headless mode

Puppeteer launches Chromium in headless mode . To launch a full version of Chromium, set the headless option when launching a browser:

const browser = await puppeteer.launch({ headless: false }); // default is true

Runs a bundled version of Chromium

By default, Puppeteer downloads and uses a specific version of Chromium so its API is guaranteed to work out of the box. To use Puppeteer with a different version of Chrome or Chromium, pass in the executable's path when creating a Browser instance:

const browser = await puppeteer.launch({ executablePath: '/path/to/Chrome' });

You can also use Puppeteer with Firefox Nightly (experimental support). See Puppeteer.launch() for more information.

For more information:

Creates a fresh user profile

Puppeteer creates its own browser user profile which it cleans up on every run.

Next steps