Tirando screenshot de websites usando PHP e PhantomJS

image_pdfimage_print

Inicialmente é necessário instalar via composer todas os programas e dependências:

composer require microweber/screen

//Em sistemas Linux é necessário ainda:
FontConfig – apt-get/yum install fontconfig
FreeType – apt-get/yum install freetype*

Em seguida, é necessário permissão de execução (caso seja um sistema Unix):
chmod +x /caminho/do/programa/instalado/bin/phantomjs

E pronto! Agora podemos utilizar o PHP para obter os print screen desejado. Para isto, basta:

use Screen\Capture;

$url = 'https://blog.drall.com.br';

$screenCapture = new Capture($url);
// ou
$screenCapture = new Capture();
$screenCapture->setUrl($url);

//Pode ser definido o tamanho da tela do navegador
$screenCapture->setWidth(1200);
$screenCapture->setHeight(800);

//Pode ser defindio a posição do Element DOM (top, left)
$screenCapture->setTop(100);
$screenCapture->setLeft(100);

/*
Isso exibirá toda a página, incluindo o conteúdo processado além das dimensões definidas em setWidth e setHeight (por exemplo: todo o conteúdo rolável), se você quiser apenas o conteúdo dentro desses boudaries você precisa cortar o resultado
*/
$screenCapture->setClipWidth(1200);
$screenCapture->setClipHeight(800);

//Algumas páginas não tem cor de fundo, em alguns casos pode ser necessário definir para uma melhor visualização do resultado. Abaixo, definindo o fundo da páginas para cor branca
$screenCapture->setBackgroundColor('#ffffff');


//Pode ser definido o User Agente a ser utilizado na identificação da visita ao site
$screenCapture->setUserAgentString('Some User Agent String');

//É possível escolher o formato da image, entre jpg e png, sendo a primeira a padrão.
$screenCapture->setImageType(Screen\Image\Types\Png::FORMAT);
// ou
$screenCapture->setImageType('png');

//E aqui como efetuar o salvamento do screenshow
$fileLocation = '/diretorio/onde/salvar/nome.' . $screen->getImageType()->getFormat();
$screenCapture->save($fileLocation);

//Outra forma é
$fileLocation = '/diretorio/onde/salvar/nome';
// Será salvo com a extensão do arquivo automaticamente
$screenCapture->save($fileLocation); 

//Como obter a localização onde a imagem foi salva
echo $screenCapture->getImageLocation();

//É possível adicionar scripts JS antes de efetuar o scrennshot
// Abaixo, como incluir arquivos externos
$jQueryUrl = 'https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js';
$screenCapture->includeJs(new \Screen\Injection\Url($jQUeryUrl));

// Abaixo, como incluir arquivos locais
$localFilePath = 'caminho/para/o/arquivo/em/disco/script.js';
$screenCapture->includeJs(new \Screen\Injection\LocalPath($localFilePath));

// Como utilizar os scripts incluidos
$screen->includeJs(new \Screen\Injection\Scripts\FacebookHideCookiesPolicy());
$screen->includeJs(new \Screen\Injection\Scripts\FacebookHideSignUp());

// Para executar códigos JS, basta:
$screen->includeJs("console.log('Injetando código JavaScript!');");

//Abaixo, como passar opções para o PhantomJS
$screenCapture->setOptions([
'ignore-ssl-errors' => 'yes',
// '--ignore-ssl-errors' => 'yes', // não é necessário passar da mesma forma que na linha de comando
]);

Maiores detalhes em https://github.com/microweber/screen

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!