Phantomjs es un navegador sin cabeza programable. Puede ser una ayuda esencial en las pruebas automatizadas de los servicios web, puede generar capturas de pantalla de la página que está visitando, imprimir de manera efectiva el tráfico mientras navega por una página, solo por nombrar algunas de sus características. Phantomjs se puede programar en JavaScript, por lo que no necesitamos aprender otro idioma si estamos familiarizados con él. Lamentablemente, su desarrollo está suspendido en este momento, pero la última versión estable está disponible para descargar.
En este tutorial instalaremos phantomjs en RHEL 8/CentOS 8 y ejecutaremos uno de los ejemplos enviados con el paquete para ver cómo funciona nuestra herramienta.
En este tutorial aprenderás:
- Cómo descargar el paquete phantomjs
- Cómo extraer y colocar el binario en la ruta
- Cómo ejecutar un script de ejemplo con phantomjs
Ejecutando un script de ejemplo con phantomjs.
Requisitos de software y convenciones utilizadas
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | RHEL 8 / CentOS 8 |
Software | Phantomjs 2.1.1 |
Otro | Acceso privilegiado a su sistema Linux como root o a través de sudo comando. |
Convenciones | # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
Cómo instalar phantomjs en RHEL 8 / CentOS 8 instrucciones paso a paso
Phantomjs es realmente autónomo. Si tenemos los pocos paquetes que requiere, no necesitaríamos root
acceso para instalar la herramienta por nosotros mismos (es decir, accesible solo para nuestro usuario). Para garantizar que todos los usuarios del sistema puedan usar esta herramienta, la colocaremos en una ruta de todo el sistema y esto requiere un usuario privilegiado.
- Primero debemos comprobar que tenemos los paquetes necesarios:
$ rpm -q glibc
glibc-2.28-18.el8.x86_64
$ rpm -q fontconfig
fontconfig-2.13.1-2.el8.x86_64
Si no, podemos instalar los paquetes anteriores con dnf
:
# dnf install glibc fontconfig
- Podemos visitar el sitio de descarga oficial para encontrar la URL que necesitamos. En nuestro caso es la dirección del paquete para Linux x86_64. Ingresamos el
/opt
directorio, donde almacenaremos el binario, ejemplos y readmes:# cd /opt
Y descarga el paquete con wget
:
# wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
- Luego extraemos el archivo:
# tar -xvf phantomjs-2.1.1-linux-x86_64.tar.bz2
- Un lugar común para los binarios y herramientas instalados por el usuario (es decir, que no se originan en los repositorios de la distribución) es
/usr/local/bin
. En RHEL, también está en el $PATH
de todos. por defecto. Creamos un enlace simbólico en este directorio y, al hacerlo, cualquier usuario antiguo o nuevo lo encontrará con un simple autocompletado de bash:# ln -s /opt/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
- Para probar tenemos
phantomjs
en nuestra ruta, podemos escribir el comando sin ninguna ruta como cualquier usuario del sistema:$ phantomjs --version
2.1.1
- Si bien el binario en sí está ahora en nuestro camino, los ejemplos enviados con el paquete distribuido no lo están. Podemos probar nuestra herramienta ejecutando estos ejemplos, que nos pueden dar un comienzo para escribir nuestros propios scripts para phantomjs. El siguiente ejemplo,
netlog.js
imprimirá todo el tráfico generado mientras phantomjs visita un sitio web, incluida la información del encabezado y los datos binarios. En nuestro caso lo ejecutamos contra el famoso info.php
(phpinfo();
de php llamado) atendido por un servidor web que se ejecuta localmente.$ phantomjs /opt/phantomjs-2.1.1-linux-x86_64/examples/netlog.js http://localhost/info.php
Se nos proporcionan todos los datos solicitados y recibidos, por lo que una simple llamada como esta producirá una salida larga.
requested: {
"headers": [
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1"
}
],
"id": 1,
"method": "GET",
"time": "2019-01-15T17:48:57.393Z",
"url": "http://localhost/info.php"
}
received: {
"body": "",
"bodySize": 60718,
"contentType": "text/html; charset=UTF-8",
"headers": [
{
"name": "Date",
"value": "Tue, 15 Jan 2019 17:48:57 GMT"
},
{
"name": "Server",
"value": "Apache/2.4.35 (Red Hat Enterprise Linux) mod_perl/2.0.10 Perl/v5.26.2"
},
{
"name": "X-Powered-By",
"value": "PHP/7.2.11"
},
{
"name": "Keep-Alive",
"value": "timeout=5, max=100"
},
[...]