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.
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.
Giovanni Bassi
Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.