PhantomJS básicamente é um browser sem interface gráfica com engine WebKit(ou seja similar ao Safari e Chrome antes do Blink), que você roda em background e manipula via uma API JavaScript, com ele é possível fazer várias tarefas automatizadas, como as seguintes:

  • Testes automatizados: Realizar testes sem ter que abrir um browser e ainda utilizando algum framework de teste JavaScript como Jasmine, QUnit, Mocha entre outros. Já existem ferramentas que usam o PhantomJS por baixo para facilitar testes, por exemplo o CaspeJS
  • Monitoramento de requisições: Interceptar qualquer requisição que uma página faça sendo possível fazer analises de performace, tempo de carregamento, e outras coisas relacionadas ao tráfego de rede de uma página.
  • Navegação automatizada: Acessar e manipular qualquer elemento de uma página (css, javascript, SVG, Canvas, DOM) sendo possível também navegar entre páginas num processo todo automatizado.
  • Screenshot de páginas: Realizar um screenshot de qualquer página web, sendo possível salvar este screenshot tanto como imagem ou PDF, logo podemos usar pra gerar algum relatório em PDF usando apenas HTML!!!!
  • Uso malicioso: Isso não vem ao caso.
E adivinha em qual linguagem estas automações são escritas? Lógico que em JavaScript ;).

Casos de uso

Abaixo alguns projetos que usam PhantomJS de alguma forma:

  • Bootstrap
  • CodeMirror
  • Ember.js
  • Grunt
  • Modernizr
  • YUI3
  • Zepto
  • Durandaljs
  • Twitter
  • Veja mais +
Eu já utilizei PhantomJS no meu trabalho na Unoeste, lá já desenvolvi alguns certificados que são gerados em PDF via PhantomJS, são desenvolvidos apenas com HTML e chamados via uma aplicação escrita em C#, ficando muito mais fácil o desenvolvimento e manutenção do mesmo.

Baixando o PhantomJS

Não há necessidade de instalar o PhantomJS, apenas é necessário baixar o executável, colocar em algum diretório e pronto, depois você já pode usá-lo.

Baixe o PhantomJS aqui: http://phantomjs.org/download.html

Como usar

Para executar alguma tarefa no PhantomJS é necessário criar um arquivo javascript e depois fazer o PhantomJS executar este javascript, a maneira de executar o PhantomJS pode ser direto pelo prompt de comando ou através de alguma linguagem que chame o processo do PhantomJS para ser executado.
Por exemplo, vou criar um arquivo javascript que acessa algum site e extrai alguma informação, neste exemplo estou acessando meu blog pegando os links que estão na página inicial e gerando um screenshot após ter colocado todos os links numa lista no topo e ter deixado em vermelho a url dos links ao lado de cada link na página.
Veja como ficou o código: O resultado desta execução será uma imagem "pagina.png", veja como ficou:

Executando via prompt de comando/terminal

Para executar o PhantomJS, via prompt, abra seu terminal de comando e entre no diretório onde você baixou o PhantomJS, e execute o seguinte comando:

Obs: você pode configurar seu PATH para o comando PhantomJS para não ter que ir toda hora no diretório

Executando via uma aplicação Node.js

Para executar o PhantomJS via node, só é preciso chamar o processo do phantomjs com o método exec ou spawn passando o caminho do arquivo js, por exemplo:

Conclusão

PhantomJS oferece uma API muito simples de usar, e suas capacidades de automatizações de tarefas como se tivesse num browser ajuda muito, seja para testes, análises, geração de PDF/imagem ele é muito útil, vale a pena usar ele.

Referências