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.
Examples
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->goto('https://example.com');$page->screenshot(['path' => 'example.png']); $browser->close();
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();$page->goto('https://example.com'); // 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)); $browser->close();
Differences
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:
Full stack web developer. Author of Lumen Programming Guide and Docker for PHP Developers.