Node.js API for Chrome
Go to file
2017-06-21 14:11:52 -07:00
docs Fix readme example 2017-06-21 14:11:52 -07:00
examples Cleanup usages of Page.saveScreenshot of 3b0bc080 2017-06-21 14:11:52 -07:00
lib Implement fullPage screenshots 2017-06-16 22:34:29 -07:00
phantom_shim Cleanup usages of Page.saveScreenshot of 3b0bc080 2017-06-21 14:11:52 -07:00
test Add lint script and editorconfig file 2017-06-21 14:11:52 -07:00
third_party/phantomjs Implement Request.setHeader() method 2017-06-15 08:37:06 -07:00
utils Introduce Eslint to validate style 2017-06-11 01:32:59 -07:00
.editorconfig Add lint script and editorconfig file 2017-06-21 14:11:52 -07:00
.eslintignore Introduce Eslint to validate style 2017-06-11 01:32:59 -07:00
.eslintrc.js Introduce Eslint to validate style 2017-06-11 01:32:59 -07:00
.gitignore Introduce screenshot tests 2017-06-16 14:33:34 -07:00
CONTRIBUTING.md update CONTRIBUTING.md 2017-06-21 14:11:52 -07:00
index.js Slight code restructuring 2017-05-14 23:28:00 -07:00
install.js Introduce Eslint to validate style 2017-06-11 01:32:59 -07:00
LICENSE Initial commit 2017-05-09 15:16:13 -07:00
package-lock.json add missing pngjs module 2017-06-16 15:02:14 -07:00
package.json use npm 2017-06-21 14:11:52 -07:00
README.md Update README.md 2017-06-21 14:11:52 -07:00
yarn.lock Add yarn.lock 2017-06-19 14:35:53 -07:00

Puppeteer

Puppeteer is a node.js library which provides a high-level API to control chromium over the Devtools Protocol. Puppeteer is inspired by PhantomJS. Check our FAQ to learn more.

Installation

git clone https://github.com/GoogleChrome/puppeteer
cd puppeteer
npm install

Note: Puppeteer bundles chromium (~70Mb) which it is guaranteed to work with. However, you're free to point puppeteer to any chromium executable (example)

Getting Started

The following node.js script navigates page to the https://example.com and saves screenshot to example.jpg:

var Browser = require('Puppeteer').Browser;
var browser = new Browser();

browser.newPage().then(async page => {
    await page.navigate('https://example.com');
    await page.screenshot({path: 'example.jpg'});
    browser.close();
});

A few gotchas:

  1. By default, puppeeteer runs bundled chromium browser. However, you can point puppeteer to a different executable (example)
  2. Puppeteer creates its own chromium user profile which it cleans up on every run.
  3. Puppeteer sets initial page size to 400px x 300px, which defines the screenshot size. The page size could be changed with Page.setSize() method

Contributing

Check out our contributing guide

FAQ

Q: What is Puppeteer?

Puppeteer is a lightweight node.js module which provides high-level API atop of DevTools protocol to control chromium browsers.

Q: Does Puppeteer work with headless Chromium?

Yes. Puppeteer bundles chromium and runs it in a headless mode by default.

Q: How's Puppeteer different to PhantomJS?

PhantomJS is a scriptable full-fledged browser. Puppeteer is a light-weight NPM module which could be used from any node.js script. This difference provides Puppeteer scripts with the following advantages:

  • Ever-green chromium browser
  • Node.js runtime environment and npm ecosystem
  • Debuggability (thanks to node.js debugging and non-headless chromium mode)

Q: Which Chromium version does Puppeteer use?

[TODO]

Q: How do I migrate from PhantomJS to Puppeteer?

There's no automatic way to migrate PhantomJS scripts to node.js scripts with Puppeteer. For more information and some guidance, check out our migration guide.

Q: Why do most of the API methods return promises?

Since Puppeteer's code is run by node.js, it exists out-of-process to the controlled chromium instance. This requires most of the API methods to be asynchronous to allow for the roundtrip to the browser.

However, with the new async/await syntax this should not deal much troubles:

browser.newPage().then(async page => {
	await page.setViewportSize({width: 1000, height: 1000});
	await page.printToPDF('blank.pdf');
	browser.close();
});

Q: What's "Phantom Shim"?

"Phantom Shim" is a layer built atop of Puppeteer API. The layer simulates phantomJS environment, employing unhealthy approaches (e.g. in-process code execution is emulated via nested event loops).

The shim is developed to run PhantomJS tests and estimate the comprehensiveness of Puppeteer API.

Migration Guide

[TODO]