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 NeskPuPHPeteerPuppeteer;

$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 NeskPuPHPeteerPuppeteer;
use NeskRialtoDataJsFunction;

$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 PsrLogLoggerInterface)
    '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!

Sumber: Laravel Blog