Puphpeteer: A Puppeteer bridge for PHP

Puphpeteer: A Puppeteer bridge for PHP

PuPHPeteer by Johann Pardanaud is PHP bridge for Google Chrome’s Puppeteer headless chrome Node.js API. PuPHPeteer is based on another package by Johann called Rialto, which is a package to manage Node resources from PHP.


PuPHPeteer has similar PHP examples based on the Puppeteer examples, to get a feel for how you might use the API in PHP.

Here’s an example of navigating to a page and taking a screenshot:

use Nesk\PuPHPeteer\Puppeteer;

$puppeteer = new Puppeteer;
$browser = $puppeteer->launch();

$page = $browser->newPage();
$page->screenshot(['path' => 'example.png']);


Here’s an example of evaluation a script in the context of a page:

use Nesk\PuPHPeteer\Puppeteer;
use Nesk\Rialto\Data\JsFunction;

$puppeteer = new Puppeteer;

$browser = $puppeteer->launch();
$page = $browser->newPage();

// Get the "viewport" of the page, as reported by the page.
$dimensions = $page->evaluate(JsFunction::create("
    return {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight,
        deviceScaleFactor: window.devicePixelRatio

printf('Dimensions: %s', print_r($dimensions, true));



The most significant difference, in my opinion, is that in every method call and getter/setter in PuPHPeteer is synchronous.

Although PuPHPeteer supports the full Node API, there are a few implementation differences. The biggest is creating a new Puppeteer; instance instead of using require('puppeteer') in Node. When you create an instance using new Puppeteer; it creates a new Node process controlled by PHP.

Next, you can pass configuration options to the constructor:

    // Node's executable path
    'executable_path' => 'node',

    // How much time (in seconds) the process can stay inactive before being killed
    'idle_timeout' => 60,

    // How much time (in seconds) an instruction can take to return a value
    'read_timeout' => 30,

    // How much time (in seconds) the process can take to shutdown properly before being killed
    'stop_timeout' => 3,

    // A logger instance for debugging (must implement \Psr\Log\LoggerInterface)
    'logger' => null,

    // Enables debugging mode:
    //   - adds the --inspect flag to Node's command
    //   - appends stack traces to Node exception messages
    'debug' => false,

PuPHPeteer requires PHP >= 7.1 and Node >= 8. Check out the GitHub repo for the full readme and installation instructions. Great job Johann!

Filed in: News
Laravel News Partners

Laravel Jobs

Senior Laravel Developer (Remote)
Remote (US or Canada)
Medior Laravel Backend Developer (The Netherlands/Dutch only)
Nijmegen, The Netherlands
BigSpark B.V.
Laravel Developer
Senior Laravel Backend Engineer
Remote, USA Only
Kittyhawk.io, Inc.
Senior Laravel Developer (b2b saas)


Join 31,000+ others and never miss out on new tips, tutorials, and more.