GithubPHP Libraries

A Puppeteer bridge for PHP – Puphpeteer

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

Examples

PuPHPeteer examples are similar to Puppeteer examples and adapted to PHP’s syntax.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *