phantomphp / phantomphp
Seamless management and comunication with phantomjs process from php
Installs: 9 239
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 0
Open Issues: 0
Requires
- php: >=5.5
Requires (Dev)
- jakoch/phantomjs-installer: ~2.1.1
- phpunit/phpunit: ~4.1
- squizlabs/php_codesniffer: ~2.5
This package is auto-updated.
Last update: 2024-12-06 19:44:29 UTC
README
WIP - This project is under heavy development you can use it now, but be aware that everything can change at anytime.
The project
Start a phantomjs process and control it from php. The top feature is the ability to communicate with a single phantomjs script from many php scripts.
Note: The project is NOT tested on windows and thus it might work only on unix systems
Overview
use PhantomPhp\PhantomClient; use PhantomPhp\PageManager; // Create a phantom client that is responsible for managing phantomjs process $client = new PhantomClient(); // Start the phantomjs js process $client->start(); // Page manager helps to generate page (like a browser with pages/tabs) $pageManager = new PageManager($client); // Create a new page $page = $pageManager->createPage(); // Open an url on this page $page->navigate('http://example.com'); // Get the dom $domString = $page->getDomContent(); // Run custom javascript on the page $divWidth = $page->runScript('return document.getElementsByTagName("div")[0].offsetWidth;'); // Stop the phantomjs process $client->stop();
Page API
TODO: page api doc
Multi process communication
Communication Channel
PhnatomPhp supports different communication channel. A communication channel represents a way to communicate with the underlying phantomjs process. By default php and phantomjs communicate through pipes, but you can turn phantomjs in a real application waiting for any script to interact with it.
To do this just start a HttpClient with a given port and you are ready to play with:
use PhantomPhp\HttpClient; use PhantomPhp\PageManager; $client = new HttpClient(8080); $client->start(); // Now phantomjs is listening on port 8080 // As with the stream client you can start a pageManager based uppon this http client $pageManager = new PageManager($client); // Create a page named foo $page = $pageManager->createPage('foo'); $page->navigate('http://example.com'); // ....
If you leave this previous process opened and open another process, the other process is able to call phantomjs without starting a new client. To do this you just have to define a http channel for the same port:
use PhantomPhp\Communication\HttpRequest; use PhantomPhp\PageManager; $channel = new HttpRequest(8080); // and pass this channel to a new page manager $pageManager = new PageManager($client); // Get the page named foo created on the other process $page = $pageManager->getPage('foo'); // warning: getPage is not implemented yet $dom = $page->getDomContent(); // ....
Roadmap
- More end points for page api
- make the page high level synchronizable on demand (also on
$page->navigate
to lower request count) - Support PSR-7 request
- Support page cookies, proxy, viewport, ua, etc...
- Support default proxy, defualt ua, default viewport, etc...
- Test error
- File log