# Navegador sin interfaz gráfica

Un navegador sin interfaz gráfica (headless browser en inglés) es un navegador web que proveen un control automatizado de una página web en un entorno similar al de un navegador web convencional, pero a diferencia de éstos, son ejecutados por medio de la consola, o usando un protocolo de red. Son particularmente útiles para el desarrollo de páginas web, puesto que son capaces de renderizar y entender HTML completamente, incluyendo elementos de estilos como el color, tipografía, esquemado y ejecución de JavaScript, características que no están disponibles habitualmente en otros métodos de prueba.

## Usos

Los navegadores sin interfaz gráfica suelen ser usados para:
* Comprobación automática en aplicaciones web modernas.
* Capturas de pantalla de sitos web.
* Ejecución de comprobaciones automáticas para las bibliotecas JavaScript.
* Extracción de datos.
* Interacción automática de páginas web.

### Usos negativos

Sin embargo, tienen otras aplicaciones menos beneficiosas:
* Llevar a cabo ataques DDOS a sitios web.
* Aumentar las impresiones de anuncios.
* Automatizar sitios web de formas no concebidas, por ejemplo, para el robo de cuentas de usuario.

## Lista de navegadores sin interfaz gráfica

* Google Chrome – desde la versión 59 Chrome soporta un modo headless en Linux, macOS and Windows.
* Mozilla Firefox – el modo headless está disponible para Linux desde la versión 55. El soporte para Windows y macOS fue añadido en la versión 56.
* PhantomJS – un navegador sin interfaz gráfica que usa el motor de renderizado WebKit y JavaScriptCore para ejecutar el código JavaScript. PhantomJS fue desarrollado originalmente por Ariya Hidayat en 2010 y ha ganado un ecosistema muy amplio de desarrollo.
* HtmlUnit – un navegador web sin interfaz gráfica escrita en Java. HtmlUnit usa el motor Rhino para dar soporte a JavaScript y AJAX, así como un renderizado parcial.
* TrifleJS – un navegador basado en scripts que usa el motor Trident para el renderizado de páginas, y V8 para la ejecución de JavaScript. TrifleJS usa la misma API que PhantomJS y usa el objeto .NET WebBrowser para controlar la versión de IE instalada en el ordenador.
* Splash – navegador sin interfaz gráfica con una API HTTP, soporte para scripts en Lua y un entorno de desarrollo basado en IPython. Splash está escrito en Python y usa WebKit como motor de renderizado. El desarrollo inició en ScrapingHub en 2013; y está parcialmente patrocinado por DARPA.

### Simulados

Navegadores que simulan un entorno de navegador. Muy parecidos a los tradicionales, pero no renderizan el árbol DOM y tienen un soporte limitado de los eventos DOM. Generalmente funcionan más rápido que los navegadores web, pero son incapaces de interpretar correctamente muchas páginas web populares.
* Zombie.js – un entorno de navegador simulado para Node.js.
* ENVJS –un entorno de navegador simulado escrito en JavaScript para el motor Rhino.
* Edbrowse

### Scripts

Éstos son navegadres que, aunque requieren una interfaz gráfica, poseen una API que permite una automatización muy similar a la de los navegadores sin interfaz gráfica tradicionales.
* SlimerJS – un navegador web scriptable que usa el motor de renderizado Gecko. SlimerJS usa la misma API que PhantomJS.