Update: o Chrome 60 saiu em 25/07/2017, e o headless já funciona com o Windows.

Todo mundo comemorou quando semana passada saiu o Chrome 59, que passou a suportar headless nativamente. Finalmente vamos poder nos livrar do PhantomJs, que anda super desatualizaao, e ter uma suite de testes consistente com o navegador mais usado no mercado. De fato é algo a se comemorar.

Se você ainda não conhece bem a ideia, esse post explica melhor como tudo funciona no headless Chrome: Getting Started with Headless Chrome.

Mas… se você trabalha no Windows, como cerca de 90% do planeta, você vai ter que esperar, porque o suporte a headless só vai sair na versão 60, que deve ainda demorar uns meses.

image

A não ser que você tenha Docker disponível. Aí a vida fica bem mais fácil, como sempre.

Eu já adiantei todo o trabalho de investigação, e o resultado é que você só precisa executar:

docker run -ti -p 9222:9222 --cap-add=SYS_ADMIN giggio/chrome

E já terá o Chrome rodando headless dentro de um contêiner, ouvindo na porta padrão, que é a 9222. Se quiser ver como isso foi montado, o repositório está no Github em giggio/docker-chrome. Lá também tem 2 exemplos de como configurar o Selenium. Basicamente você tem que informar que já tem um Chrome rodando.

Após subir o contêiner, você pode acessar http://localhost:9222/ para verificar que páginas estão abertas. O blog do Chromium explica isso um pouco melhor.

No Node.js:

const options = new Options();
options.options_["debuggerAddress"] = "127.0.0.1:9222";
const driver = new webdriver.Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.build();

E no C#:

var driver = new ChromeDriver(new ChromeOptions { DebuggerAddress = "localhost:9222" })

Nada mais simples, certo?

Divirtam-se.