En el post anterior se dieron los primeros pasos con Puppeteer. Se analizó las ventajas de usarlo, cómo realizar la instalación y un script de ejemplo. En esta segunda entrega de Automatización y monitorización con Puppeteer se verá cómo analizar las respuestas de una web.

 puppeteer dbigcloud

 

El protocolo HTTP está orientado a transacciones y sigue un esquema de petición-respuesta. Cada vez accedemos a una página web se realiza una petición a un servidor y este envía una respuesta. En los sistemas de monitorización se suelen utilizar las respuestas para comprobar el estado de un servicio. Estas comprobaciones se realizan a veces analizando las cabeceras de respuesta y comprobando el código de estado devuelto, aunque esto puede no ser efectivo del todo.

Con Puppeteer se pueden realizar las comprobaciones necesarias de las respuestas obtenidas para una monitorización efectiva. Veamos los métodos más importantes de la clase Response:

  • response.headers(): Devuelve las cabeceras de cada una de las peticiones realizadas. 
  • response.json(): Devuelve el cuerpo de la respuesta en formato JSON. Si el cuerpo no es posible transformarlo en JSON lanzará una excepción.
  • response.ok(): Devuelve True/False si se ha recibido un código de estado HTTP exitoso. Estos son los comprendidos en el rango 200-299.
  • response.securityDetails(): Ofrece información de si la conexión realizada ha sido segura, mostrando información del certificado y protocolo utilizado.
  • response.status(): Devuelve el código de estado HTTP.
  • response.statusText(): Devuelve el texto asociado al código de estado HTTP.
  • response.text(): Devuelve el cuerpo de la respuesta.
  • response.url(): Devuelve el listado de URL de la respuesta.

Existen otros metodos de la clase Reponse aparte de los mencionados que no se verán pero que podéis consultar ustedes mismos.

El ejemplo que se va a realizar consistirá en:

  • Acceder a la página web de Github.
  • Realizar login con datos válidos.
  • Analizar las respuestas obtenidas.

Para seguirlo es recomendable repasar el post anterior y recordar cómo obtener los elementos de la web con los que interactuar. Acceder al portal de acceso a Github y anotad los Selectors de:

  • Caja de texto de: Username or email address.
  • Caja de texto de: Password.
  • Botón de Sign in.

Cuando se navega por una web, internamente se realizan diferentes peticiones al servidor para solicitar imágenes, ficheros Javascript, etc. Estas son normalmente invisibles para el usuario, pero si abren las Devtools se pueden observar. Hay que tener en cuenta que con Puppeteer ocurre lo mismo, por lo que recibiremos las respuestas de todas las peticiones que se hagan internamente. Pensad que estáis haciendo uso del navegador.

Veamos el siguiente código:
 
response url
 
 
Se ha accedido a la web de Github y se ha hecho login con unas credenciales válidas. La información de respuesta la obtenemos justo en la línea page.on(...) en esta primera parte se ha llamado al método reponse.url() para obtener todas las direcciones de respuesta. Si se ejecuta el código, han respondido bastantes URL, muchas de ellas de las imágenes SVG que utiliza Github. Pero vamos a quedarnos con dos para seguir los ejemplos:

La primera URL es perfecta para utilizar el método response.json() ya que esta llamada devuelve una respuesta en este formato con la URL del logotipo de Github y sus tamaños.

 

response json puppeteer

 

Si observáis esta nueva parte se ha convertido la función de forma síncrona, esto es debido a que se necesita esperar a que se finalice la petición y el servidor responda con la información solicitada. Si ejecutáis el código recibiréis un JSON con lo comentado anteriormente.

Ahora vamos a analizar la llamada a la segunda petición. 

 

response status code Puppeteer

 

Lo primero que se realiza es comprobar con response.ok() si se ha tenido éxito en la respuesta. En caso de que sí se mostrar el código y mensaje de estado, y el cuerpo de la respuesta. Observar que el cuerpo de la respuesta vuelve a ser una petición síncrona.

Esta es una petición buena para crear un chequeo de monitorización. Si se combina la librería Cheerio de Javascript con el response.text() se puede trabajar de forma muy cómoda para buscar elementos de la web que indiquen que realmente se ha realizado login correctamente.

 

reponse cheerio puppeteer

 

Con esta petición se ha buscado el elemanto HTML a con la clase "lh-condensed link-gray-dark text-bold mr-1.mb-2" y se ha mostrado su texto. Si ejecutáis el script obtendréis un mensaje que dirá: Page loading stucks on header manipulation if page give 302 status code. Y ahora pensad en un sistema de monitorización y el siguiente comando:

dbigcloud@dbigcloud:~/$ node dbigcloud_response.js | grep '200 OK Page loading stucks on header manipulation if page give 302 status code' | wc -l

Por último, veamos el método response.securityDetails(). Este puede ser muy útil ya que nos ofrece información de sobre el protocolo de seguridad con el que se ha establecido la conexión, además ofrece información sobre el certificado como la fecha de expiración que la da el campo _validTo en formato Unixtime. ¡Pues ya tenemos otro chequeo de monitorización! Cómo monitorizar la expiración de un certificado SSL con Puppeteer.

 

reponse certificate puppeteer

 

La respuesta obtenida es:

dbigcloud@dbigcloud:~$ node dbigcloud_response.js
200 OK Page loading stucks on header manipulation if page give 302 status code
Certificate expire on Wed Jun 03 2020 14:00:00 GMT+0200 (GMT+02:00)

 Con este script puedes ver cómo monitorizar el login de una página web y comprobar a la vez cuando expira el certificado SSL. Si queréis descargar el ejemplo al completo, podéis acceder al repositorio de DBigCloud y hacerlo.

Automatización y monitorización con Puppeteer

 


Compártelo:

FacebookTwitterDiggGoogle BookmarksLinkedIn

Daniel Romero Sanchez
Author: Daniel Romero SanchezWebsite: https://www.dbigcloud.com
Responsable de sistemas y Arquitecto Cloud - vExpert 2015/19- VCP550-DCV - LPIC-1


Escribir un comentario

Código de seguridad
Refescar

DBigCloud en tu idioma

esenfrdeitptru

Gold Sponsor

 

vExpert 2017

DbigCloud newsletter

Suscribete a nuestra newsletter y recibe cada semana los mejores artículos seleccionados por DBigCLoud.
Email type
Please wait