Como fazer uma captura de tela de um site com PHP PhantomJs

PhantomJS é um WebKit sem cabeçalho com uma API Javascript e PHP PhatomJS é uma biblioteca PHP flexível para carregar páginas por meio do navegador sem cabeçalho PhantomJS.

Pré-requisitos

  • PHP 5.3. * OU superior
  • PHP Bz2

Os passos para instalar o PHP PhantomJS podem ser seguidos aqui .

Um exemplo rápido com o Laravel que tira uma captura de tela e salva no storage.

use JonnyWPhantomJsClient;

$client
= Client::getInstance();

// isLazy() is useful when we want to wait for all resources on the page to load.
$client
->isLazy();

// Something important, set the absolute path to phatomjs bin file
$client
->getEngine()->setPath(base_path('bin/phantomjs'));

// Some options
$client
->getEngine()->addOption('--load-images=true');
$client
->getEngine()->addOption('--ignore-ssl-errors=true')

// Here specify the page to take the screenshot
$request
= $client->getMessageFactory->createCaptureRequest('https://eresendez.com', 'GET')

$request
->setBodyStyles(['backgroundColor' => '#ffffff']);
$request
->setOutputFile(storage_path('sample.jpg'));

$response
= $client->getMessageFactory()->createResponse()
// Send the request
$client
->send($request, $response);

Com isso, é possível obter e armazenar a captura de tela no storage. O PhantomJs tem a opção de exportar para PDF, porém, se quisermos fazer mais operações com o PDF, é melhor usar outra ferramenta como o DOMPDF e passar essa imagem.

// Send to DOM PDF
$image
= storage_path('sample.jpg');

$view
= View::make('pdf.sample', compact('image')->render();
$pdf
= App::make('dompdf.wrapper');

$pdf
->loadHTML($view)->setPaper('letter', 'landscape');
return $pdf->stream();

Concluído, o PhantomJS tem muito mais opções, é muito robusto, mas para este exemplo simples, me ajudou a obter uma imagem de um site, salvá-la e depois tratá-la com DOM PDF.