PhantomJS Es un navegador sin interfaz gráfica para automatizar la interacción de las páginas web. PhantomJS proporciona una API de Javascript que permite la navegación automatizada, capturas de pantalla, comportamiento del usuario y las aserciones, lo que lo convierte en una herramienta común utilizada para ejecutar pruebas unitarias basadas en el navegador en un sistema sin interfaz gráfica como un entorno de integración continua. PhantomJS está basado en WebKit, lo que lo convierte en un entorno de navegación similar a Safari y Google Chrome (antes de un fork de Chrome de WebKit evolucionara a Blink). Es un software de código abierto publicado bajo la Licencia BSD.

PhantomJS
Información general
Tipo de programa software testing tool
Autor Ariya Hidayat
Desarrollador Ariya Hidayat
Licencia BSD[1]
Información técnica
Programado en C++
Versiones
Última versión estable 2.1.1[2]()
Enlaces

Historia

editar

PhantomJS fue lanzado el 26 de enero de 2011 por Ariya Hidayat después de varios años de desarrollo.[3]

El primer commit público al proyecto fue en 2011.[4]

El logo comúnmente usado para referirse pictóricamente a PhantomJS es un fantasma azul fluorescente sobre un fondo negro. Esto se refiere a la falta de interfaz gráfica de usuario, o cuerpo principal del navegador, haciendo que los usuarios de PhantomJS parezcan fantasmas.

En marzo de 2018, el desarrollo de PhantomJS se suspendió debido a la falta de contribuciones activas.[5]

Uso de PhantomJS

editar

El API de Javascript de PhantomJS puede utilizarse para abrir páginas web, toma capturas de pantalla, ejecutar acciones de usuario y ejecutar JavaScript inyectado en el contexto de la página. Por ejemplo, el siguiente código abrirá Wikipedia y, al cargarlo, guardará una captura de pantalla en un archivo y saldrá.

console.log('Cargando pagina web');
var page = require('webpage').create();
var url = 'http://en.wikipedia.org/';
page.open(url, function (status) {
  console.log('Pagina cargada');
  page.render('wikipedia.org.png');
  phantom.exit();
});

Herramientas que utilizan PhantomJS

editar

CasperJS

editar

Poco después del lanzamiento de PhantomJS, Nicolas Perriault escribió CasperJS, un conjunto de bibliotecas sobre PhantomJS que amplían sus capacidades como cliente para la prueba automatizada de páginas web. CasperJS Y PhantomJS se han vuelto lo suficientemente valiosos como para que proyectos similares hayan comenzado a adoptar el API como una forma estándar de interactuar con los navegadores sin interfaz gráfica.[6][7]

Yahoo! desarrolló una versión de YSlow que aprovecha PhantomJS para reunir métricas de rendimiento para sitios web.[8]

Compañías que utilizan PhantomJS

editar

Otros usos para PhantomJS

editar

PhantomJS fue hecho hecho para el control programático de sitios web y ha sido utilizado para muchos propósitos, desde la diferenciación visual hasta la prueba automatizada de frameworks Javascript.[13][14]

Renderización en el servidor de JavaScript del lado del cliente

editar

Con el aumento de Javascript de lado del cliente y los problemas de SEO que la práctica presenta, los desarrolladores recurrieron a PhantomJS como manera de pre-renderizar el HTML estático para las solicitudes iniciales.[15][16]​ A pesar del impacto en el rendimiento de este enfoque, siguió siendo una de las formas más sencillas de mejorar el SEO sin reescribir una aplicación web, generando servicios tratan de automatizar el proceso.[17]

Uso malicioso de PhantomJS

editar

Debido a que PhantomJS se puede ejcutar sin interfaz de usuario, se puede programar a través de Javascript, y se adhiere relativamente a las especificaciones de los navegadores modernos, se utiliza comúnmente como una forma de automatizar ataques contra los sitios web.[18]​ PhantomJS imita el tráfico de usuarios legítimos y puede complicar las tecnologías de mitigación de ataque. PhantomJS también puede se utilizado para verificar automáticamente los inicios de sesión en sitios web. (credential stuffing), agravando los problemas que surgen después de que un sitio es violado y los nombres de usuario son filtrados.[19]

Véase también

editar

Referencias

editar
  1. «phantomjs/LICENSE.BSD at master · ariya/phantomjs». GitHub (en inglés). 
  2. «Releases · ariya/phantomjs». GitHub. Consultado el 21 de abril de 2017. 
  3. «don't code today what you can't debug tomorrow». ariya.blogspot.com. Consultado el 20 de julio de 2015. 
  4. «ariya/phantomjs». GitHub. Consultado el 20 de julio de 2015. 
  5. «Archiving the project: suspending the development». ariya/phantomjs. Github. 3 de marzo de 2018. 
  6. Laurent Jouanneau. «FaQ - SlimerJS». slimerjs.org. Consultado el 20 de julio de 2015. 
  7. «trifleJS». trifleJS. Consultado el 20 de julio de 2015. 
  8. Marcel Duran. «YSlow - Official Open Source Project Website». yslow.org. Consultado el 20 de julio de 2015. 
  9. «Leo Lanese on Twitter». Twitter. Consultado el 20 de julio de 2015. 
  10. phegaro. «LinkedIn Mobile: How do we do it?». SlideShare. Consultado el 20 de julio de 2015. 
  11. Michael Mimoso. «Netflix Open Source Security Tools Solve Range of Challenges». threatpost.com. Consultado el 20 de julio de 2015. 
  12. «one year of wandering headlessly». ofilabs.com. Archivado desde el original el 22 de julio de 2015. Consultado el 20 de julio de 2015. 
  13. «Huddle/PhantomCSS». GitHub. Consultado el 20 de julio de 2015. 
  14. EisenbergEffect. «Docs - Testing with PhantomJS and Jasmine - Durandal». durandaljs.com. Consultado el 20 de julio de 2015. 
  15. «Short story about rendering HTML, client side vs server side». eshlox. Consultado el 20 de julio de 2015. 
  16. Aaron O'Connell (22 de abril de 2014). «Sever-Side Rendering of Single Page Apps using PhantomJS and Node.js». 42floors.com. Consultado el 20 de julio de 2015. 
  17. «BromBone - SEO for your AngularJS, EmberJS, or BackboneJS website.». Brombone.com. Consultado el 20 de julio de 2015. 
  18. «DDoS Attack Used 'Headless' Browsers In 150-Hour Siege». Dark Reading. Consultado el 20 de julio de 2015. 
  19. «Logging in to Amazon using PhantomJS». GitHub Gists. Consultado el 20 de julio de 2015. 

Enlaces externos

editar