1. Go to this page and download the library: Download chrome-php/chrome library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
chrome-php / chrome example snippets
use HeadlessChromium\BrowserFactory;
$browserFactory = new BrowserFactory();
// starts headless Chrome
$browser = $browserFactory->createBrowser();
try {
// creates a new page and navigate to an URL
$page = $browser->createPage();
$page->navigate('http://example.com')->waitForNavigation();
// get page title
$pageTitle = $page->evaluate('document.title')->getReturnValue();
// screenshot - Say "Cheese"! 😄
$page->screenshot()->saveToFile('/foo/bar.png');
// pdf
$page->pdf(['printBackground' => false])->saveToFile('/foo/bar.pdf');
} finally {
// bye
$browser->close();
}
use HeadlessChromium\BrowserFactory;
// replace default 'chrome' with 'chromium-browser'
$browserFactory = new BrowserFactory('chromium-browser');
use HeadlessChromium\BrowserFactory;
$browserFactory = new BrowserFactory();
$browser = $browserFactory->createBrowser([
'headless' => false, // disable headless mode
]);
[
'connectionDelay' => 0.8, // add 0.8 second of delay between each instruction sent to Chrome,
'debugLogger' => 'php://stdout', // will enable verbose mode
]
use HeadlessChromium\BrowserFactory;
$browserFactory = new BrowserFactory();
$browser = $browserFactory->createBrowser([
'windowSize' => [1920, 1000],
'enableImages' => false,
]);
// this browser will be created without any options
$browser2 = $browserFactory->createBrowser();
$browserFactory->setOptions([
'windowSize' => [1920, 1000],
]);
// both browser will have the same 'windowSize' option
$browser1 = $browserFactory->createBrowser();
$browser2 = $browserFactory->createBrowser();
$browserFactory->addOptions(['enableImages' => false]);
// this browser will have both the 'windowSize' and 'enableImages' options
$browser3 = $browserFactory->createBrowser();
$browserFactory->addOptions(['enableImages' => true]);
// this browser will have the previous 'windowSize', but 'enableImages' will be true
$browser4 = $browserFactory->createBrowser();
use \HeadlessChromium\BrowserFactory;
use \HeadlessChromium\Exception\BrowserConnectionFailed;
// path to the file to store websocket's uri
$socket = \file_get_contents('/tmp/chrome-php-demo-socket');
try {
$browser = BrowserFactory::connectToBrowser($socket);
} catch (BrowserConnectionFailed $e) {
// The browser was probably closed, start it again
$factory = new BrowserFactory();
$browser = $factory->createBrowser([
'keepAlive' => true,
]);
// save the uri to be able to connect again to browser
\file_put_contents($socketFile, $browser->getSocketUri(), LOCK_EX);
}
// navigate
$navigation = $page->navigate('http://example.com');
// wait for the page to be loaded
$navigation->waitForNavigation();
use HeadlessChromium\Page;
// wait 10secs for the event "DOMContentLoaded" to be triggered
$navigation->waitForNavigation(Page::DOM_CONTENT_LOADED, 10000);
use HeadlessChromium\Exception\OperationTimedOut;
use HeadlessChromium\Exception\NavigationExpired;
try {
$navigation->waitForNavigation()
} catch (OperationTimedOut $e) {
// too long to load
} catch (NavigationExpired $e) {
// An other page was loaded
}
// navigate
$navigation = $page->navigate('http://example.com');
// wait for the page to be loaded
$navigation->waitForNavigation();
// evaluate script in the browser
$evaluation = $page->evaluate('document.documentElement.innerHTML');
// wait for the value to return and get it
$value = $evaluation->getReturnValue();
$evaluation = $page->callFunction(
"function(a, b) {\n window.foo = a + b;\n}",
[1, 2]
);
$value = $evaluation->getReturnValue();
$width = 600;
$height = 300;
$page->setViewport($width, $height)
->await(); // wait for the operation to complete
// navigate
$navigation = $page->navigate('http://example.com');
// wait for the page to be loaded
$navigation->waitForNavigation();
// take a screenshot
$screenshot = $page->screenshot([
'format' => 'jpeg', // default to 'png' - possible values: 'png', 'jpeg', 'webp'
'quality' => 80, // only when format is 'jpeg' or 'webp' - default 100
'optimizeForSpeed' => true // default to 'false' - Optimize image encoding for speed, not for resulting size
]);
// save the screenshot
$screenshot->saveToFile('/some/place/file.jpg');
use HeadlessChromium\Clip;
// navigate
$navigation = $page->navigate('http://example.com');
// wait for the page to be loaded
$navigation->waitForNavigation();
// create a rectangle by specifying to left corner coordinates + width and height
$x = 10;
$y = 10;
$width = 100;
$height = 100;
$clip = new Clip($x, $y, $width, $height);
// take the screenshot (in memory binaries)
$screenshot = $page->screenshot([
'clip' => $clip,
]);
// save the screenshot
$screenshot->saveToFile('/some/place/file.jpg');
// navigate
$navigation = $page->navigate('https://example.com');
// wait for the page to be loaded
$navigation->waitForNavigation();
$screenshot = $page->screenshot([
'captureBeyondViewport' => true,
'clip' => $page->getFullPageClip(),
'format' => 'jpeg', // default to 'png' - possible values: 'png', 'jpeg', 'webp'
]);
// save the screenshot
$screenshot->saveToFile('/some/place/file.jpg');
// navigate
$navigation = $page->navigate('http://example.com');
// wait for the page to be loaded
$navigation->waitForNavigation();
$options = [
'landscape' => true, // default to false
'printBackground' => true, // default to false
'displayHeaderFooter' => true, // default to false
'preferCSSPageSize' => true, // default to false (reads parameters directly from @page)
'marginTop' => 0.0, // defaults to ~0.4 (must be a float, value in inches)
'marginBottom' => 1.4, // defaults to ~0.4 (must be a float, value in inches)
'marginLeft' => 5.0, // defaults to ~0.4 (must be a float, value in inches)
'marginRight' => 1.0, // defaults to ~0.4 (must be a float, value in inches)
'paperWidth' => 6.0, // defaults to 8.5 (must be a float, value in inches)
'paperHeight' => 6.0, // defaults to 11.0 (must be a float, value in inches)
'headerTemplate' => '<div>foo</div>', // see details above
'footerTemplate' => '<div>foo</div>', // see details above
'scale' => 1.2, // defaults to 1.0 (must be a float)
];
// print as pdf (in memory binaries)
$pdf = $page->pdf($options);
// save the pdf
$pdf->saveToFile('/some/place/file.pdf');
// or directly output pdf without saving
header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename=filename.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
echo base64_decode($pdf->getBase64());
// After creating a page.
$page->setDownloadPath('/path/to/save/downloaded/files');
$page->mouse()
->move(10, 20) // Moves mouse to position x=10; y=20
->click() // left-click on position set above
->move(100, 200, ['steps' => 5]) // move mouse to x=100; y=200 in 5 equal steps
->click(['button' => Mouse::BUTTON_RIGHT]; // right-click on position set above
// given the last click was on a link, the next step will wait
// for the page to load after the link was clicked
$page->waitForReload();
$page->mouse()
->scrollDown(100) // scroll down 100px
->scrollUp(50); // scroll up 50px
try {
$page->mouse()->find('#a')->click(); // find and click at an element with id "a"
$page->mouse()->find('.a', 10); // find the 10th or last element with class "a"
} catch (ElementNotFoundException $exception) {
// element not found
}
$page->keyboard()
->typeRawKey('Tab') // type a raw key, such as Tab
->typeText('bar'); // type the text "bar"
$page->keyboard()->setKeyInterval(10); // sets a delay of 10 milliseconds between keystrokes
// ctrl + a to select all text
$page->keyboard()
->press('control') // key names are case insensitive and trimmed
->type('a') // press and release
->release('Control');
// ctrl + c to copy and ctrl + v to paste it twice
$page->keyboard()
->press('Ctrl') // alias for Control
->type('c')
->type('V') // upper and lower cases should behave the same way
->release(); // release all
use HeadlessChromium\Cookies\Cookie;
$page = $browser->createPage();
// example 1: set cookies for a given domain
$page->setCookies([
Cookie::create('name', 'value', [
'domain' => 'example.com',
'expires' => time() + 3600 // expires in 1 hour
])
])->await();
// example 2: set cookies for the current page
$page->navigate('http://example.com')->waitForNavigation();
$page->setCookies([
Cookie::create('name', 'value', ['expires'])
])->await();
use HeadlessChromium\Cookies\Cookie;
$page = $browser->createPage();
// example 1: get all cookies for the browser
$cookies = $page->getAllCookies();
// example 2: get cookies for the current page
$page->navigate('http://example.com')->waitForNavigation();
$cookies = $page->getCookies();
// filter cookies with name == 'foo'
$cookiesFoo = $cookies->filterBy('name', 'foo');
// find first cookie with name == 'bar'
$cookieBar = $cookies->findOneBy('name', 'bar');
if ($cookieBar) {
// do something
}
$page->setUserAgent('my user-agent');
use HeadlessChromium\Communication\Connection;
use HeadlessChromium\Communication\Message;
// Chrome devtools URI
$webSocketUri = 'ws://127.0.0.1:9222/devtools/browser/xxx';
// create a connection
$connection = new Connection($webSocketUri);
$connection->connect();
// send method "Target.activateTarget"
$responseReader = $connection->sendMessage(new Message('Target.activateTarget', ['targetId' => 'xxx']));
// wait up to 1000ms for a response
$response = $responseReader->waitForResponse(1000);
// given a target id
$targetId = 'yyy';
// create a session for this target (attachToTarget)
$session = $connection->createSession($targetId);
// send message to this target (Target.sendMessageToTarget)
$response = $session->sendMessageSync(new Message('Page.reload'));
$connection->setConnectionDelay(500); // wait for 500ms between each operation to ease debugging
use HeadlessChromium\Communication\Connection;
use HeadlessChromium\Browser;
// Chrome devtools URI
$webSocketUri = 'ws://127.0.0.1:9222/devtools/browser/xxx';
// create connection given a WebSocket URI
$connection = new Connection($webSocketUri);
$connection->connect();
// create browser
$browser = new Browser($connection);