Tirando screenshot de websites usando PHP e PhantomJS

image_pdfimage_print

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

1
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use Screen\Capture;
 
 
$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
$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!