Puppeteer vs Selenium: Diferencias fundamentales

Comentarios: 0

Para la interacción automatizada con un navegador, las pruebas de aplicaciones, el web scraping o la ejecución de tareas mediante scripts, Puppeteer y Selenium son las herramientas a las que hay que recurrir. Aunque ambos frameworks compiten en cuanto a sus capacidades para realizar tareas en recursos web, tienen características distintas que muestran sutilezas operativas. Comprender los pros y los contras de cada herramienta es esencial para determinar cuál seleccionar para una tarea específica. Este artículo intenta esbozar estas diferencias en una guía sobre Puppeteer vs Selenium para que pueda elegir de forma inteligente en función de sus objetivos.

Guía de vídeo para configurar un proxy en Puppeteer

¿Qué es el Selenium?

Selenium es un producto de código abierto gratuito dedicado a la automatización para el control de navegadores, pruebas de sitios web y extracción de datos.

Los componentes de la suite WebDriver, IDE, Remote Control, Grid y Server tienen diferencias en su implementación, pero todos comparten el mismo resultado. Simulan las acciones del usuario en el navegador basándose en un algoritmo que se les proporciona.

Es compatible con la mayoría de ellos en todos los sistemas operativos.

Para utilizar el navegador es necesario cumplir los siguientes requisitos:

  • Es necesario instalar una herramienta de desarrollo en el ordenador, como Visual Studio, Apache o IntelliJ IDEA.
  • Los entornos virtuales tiran de la biblioteca correspondiente.
  • Se instala un navegador web compatible con la ejecución de pruebas o el raspado de datos.
  • Dependiendo de la versión y el tipo de la misma, WebDriver está configurado.

Las condiciones especificadas anteriormente deben cumplirse para habilitar el siguiente algoritmo de gestión:

  • Escribe código en un lenguaje de programación compatible. ⇒ Ejecuta el código. ⇒ El código accede al Driver. ⇒ El Driver delega autoridad a WebDriver (ChromeDriver, FirefoxDriver, etc.). ⇒ WebDriver traduce el código en comandos y dicta acciones. ⇒ El navegador procesa la petición y devuelve la respuesta.

Estas operaciones son necesarias para completar los pasos siguientes:

  • Pruebas funcionales de aplicaciones web;
  • Pruebas multiplataforma;
  • Automatización de las actividades de carga y descarga;
  • Comprobación del rendimiento de la velocidad de carga del sitio o utilización de Page Speed Insights;
  • Generación automatizada de capturas de pantalla y análisis de contenido;
  • Extracción de metadatos de páginas web;
  • Extracción de datos como enlaces, texto, imágenes y atributos HTML;
  • Análisis de otros contenidos procedentes de recursos web dinámicos en los que los datos se cargan mediante AJAX u otros métodos asíncronos.

Desde nuestra observación, esta herramienta permite interactuar con cualquier sitio web y ofrece la posibilidad de probar su contenido, además de interactuar con los componentes de la página y la extracción de datos, lo que resulta especialmente útil para el scraping de información que se carga dinámicamente. Estas son las ventajas de las herramientas Selenium que las hacen preferibles en determinados ámbitos.

¿Qué es Puppeteer?

Empecemos con la pregunta: ¿es Puppeteer mejor que Selenium? Es una librería relativamente nueva para controlar remotamente navegadores Google Chrome headless. Aprovecha la API de alto nivel de Node.js y el protocolo DevTools para la automatización de actividades específicas.

Se puede interactuar con esta biblioteca utilizando un terminal de línea de comandos y conociendo la gramática básica de JavaScript.

Como en el caso de la primera herramienta, se requieren unos sencillos pasos para ponerla en marcha:

  1. Descarga e instala la última versión de Node.js. Con la instalación de Node, también se instalará npm (el gestor de paquetes).
  2. Crea una carpeta de proyecto.
  3. Añade la librería usando el comando npm install puppeteer en npm.

Si todos los ajustes se han realizado correctamente, la interacción con el navegador se estructurará de acuerdo con el siguiente escenario:

  • La librería accede al protocolo DevTools. ⇒ El protocolo va a través de WebSocket al navegador. ⇒ El navegador recibe y procesa el comando. ⇒ Devuelve la respuesta.

Como vemos, los escenarios de interacción varían para las dos herramientas. Mientras que la primera requiere un entorno de desarrollo y WebDriver que interactúa a través de su GUI, la segunda se inicia con el paquete Node y comanda Google Chrome utilizando el protocolo JavaScript DevTools.

Este estilo de control del navegador funciona especialmente bien con sitios web basados en AJAX, ya que muchas herramientas no suelen funcionar con contenidos que cambian dinámicamente.

Algunas de las ventajas son:

  • Creación de pruebas para páginas y aplicaciones web dinámicas;
  • Extracción automática de datos de páginas web;
  • Simulación de las actividades del personal del centro para probar los formularios y la interacción manual con los elementos de la interfaz de usuario;
  • Captura de imágenes de páginas web que luego se guardan en formato PNG: generación de capturas de pantalla;
  • Generación de representación de páginas web en formato PDF: descarga y conversión de páginas web en documentos PDF;
  • Supervisión del rendimiento: recopilación de trazas cronológicas y otras métricas para su posterior análisis;
  • Construcción de páginas: extraer el árbol DOM y analizarlo en fragmentos de código HTML, hojas de estilo CSS y código JavaScript.

Este conjunto de capacidades dista mucho de ser exhaustivo. Las limitaciones de la herramienta vienen impuestas por la ejecución en modo headless a través del protocolo DevTools y la conexión WebSocket, que permite a las herramientas externas de pruebas o automatización enviar comandos y recibir información de Chrome.

Puppeteer vs Selenium: Diferencias clave

Como hemos señalado, la principal limitación de Puppeteer es que sólo funciona con Google Chrome, mientras que Selenium se puede utilizar con varios otros. Este es uno de los factores diferenciadores más importantes entre otros.

Demos un paso más y consideremos otros criterios de evaluación y presentémoslos en la tabla "Selenium vs Puppeteer" que figura a continuación.

Característica Selenium Puppeteer
Soporte OS Windows, Linux, macOS Windows, Linux, macOS
Soporte de lenguajes de programación Java, Python, Ruby, C#, JavaScript, Kotlin y otros JavaScript
Instalación Entorno de desarrollo, controlador para cada navegador, bibliotecas adicionales Node.js y gestor de paquetes
Gestión WebDriver Protocolo Chrome DevTools
Rendimiento Alto uso de RAM y CPU, ya que funciona con interfaces Uso mínimo de RAM y CPU, funciona en modo "sin cabeza".
Plataformas de pruebas Web y móvil Web
Integración Compatible con otras herramientas y bibliotecas de pruebas y raspado Compatibilidad limitada a las herramientas para Google Chrome
Documentación Tutoriales, servicio de asistencia y foro Tutoriales, foros no oficiales
Tipos de pruebas Pruebas multiplataforma, funcionales, de rendimiento, de interfaz de usuario, de integración Pruebas funcionales, de rendimiento y de interfaz de usuario
Raspado Texto, atributos HTML, datos de formularios, datos de contenido dinámico, enlaces, imágenes Texto + PDF, atributos HTML, datos de formularios, datos de contenido dinámico, enlaces, imágenes y multimedia

De los parámetros que figuran en la tabla se desprende que existe cierta compatibilidad entre las herramientas, pero también que no son igual de eficaces para todas las tareas.

Selenium vs Puppeteer: Comparación de rendimiento

En esta sección, nos centramos en: cuál es mejor Selenium o Puppeteer en términos de velocidad de funcionamiento, que es un factor básico de distinción entre las dos herramientas. Esto se vuelve particularmente importante cuando se trabaja con grandes conjuntos de datos o el raspado de JavaScript sitios web pesados.

Analicemos el rendimiento desde algunos ángulos más.

Velocidad de lanzamiento

Este parámetro tiene que ver con la forma en que la herramienta interactúa con el navegador.

Selenium, como hemos señalado anteriormente, utiliza un WebDriver que controla el entorno por encima de su UI, lo que significa que añade una capa extra que infla el tiempo necesario para poner en marcha el programa.

Entonces, ¿cuáles son las principales ventajas de usar Puppeteer sobre Selenium? Si se utiliza el primero no hay ningún intermediario entre el navegador y el mismo, ya que la conexión se realiza a través del protocolo DevTools, por lo que la velocidad de lanzamiento es mucho mayor en comparación con el segundo.

Tiempo de procesamiento de elementos DOM

En el caso de WebDriver, la interacción con el DOM se realiza a través de un modelo cliente-servidor; en este caso, Selenium WebDriver actúa como cliente mientras que ChromeDriver lo hace como servidor. El tiempo de procesamiento para este modelo viene determinado por el tipo de driver utilizado así como por la estructura del árbol. El tiempo de procesamiento para DOM es mayor si la página se sirve en JavaScript.

Con respecto a los navegadores basados en Chromium, Puppeteer realiza mejores manipulaciones DOM debido a algunas características distintivas como la implementación directa del protocolo DevTools, el modelo de comunicación basado en comandos y la ausencia de WebDriver como intermediario. Además, no se puede utilizar junto con otros, lo que hace que la comparación sea algo sesgada.

Impacto de los componentes clave

Una herramienta como Selenium implementa el scripting a través de una interfaz dedicada que utiliza JSON. Cada comando se emite en formato JSON y se envía al controlador apropiado (por ejemplo, SafariDriver) a través de HTTP. El comando se ejecuta y los resultados son respuestas codificadas en JSON. El ManagedWebDriver de Selenium utiliza HTTP, que es un protocolo dúplex parcial, lo que limita la velocidad a la que los comandos pueden ser enviados y ejecutados.

1.jpg

A través de Puppeteer, se conecta vía WebSocket, creando un área de intercambio de datos bidireccional entre el cliente y el navegador. Se ejecuta en TCP, un flujo de datos fiable y rápido que está encriptado y autenticado. Esto protege la información de accesos ilegales.

2.jpg

Velocidad de renderizado

Las estimaciones de tiempo de renderizado en Puppeteer son significativamente menores que en Selenium. El primero simplemente trabaja con Chromium, mientras que el segundo utiliza librerías adicionales para hacer un seguimiento del tiempo de renderizado.

Selenium vs Puppeteer: Web Scraping

Puppeteer vs Selenium son algo comparables en lo que respecta al web scraping. La principal diferencia es que con el segundo, la elección depende de los requisitos particulares de que se trate.

Se recomienda Puppeteer para:

  • Análisis rápido de páginas web;
  • Recopilación de información multimedia, ya que Selenium no procesa vídeo ni audio, sólo imágenes;
  • Convertir una página HTML en un PDF;
  • Medios de scraping que tienen medidas anti-bot o anti-scraping.

El Selenium se aplica para:

  • Scraping de páginas web que tienen JavaScript para cargar datos y necesitan soporte multiplataforma;
  • Análisis de SPAs (Single Page Applications) funcionando con cambio de contenido en lugar de refresco de página;
  • Ejecución de comandos sobre elementos, como hacer clic, desplazarse y rellenar formularios.

Para un análisis más profundo en ambas herramientas, se pueden utilizar XPath, selectores CSS y otros métodos, que permiten localizar con precisión las herramientas necesarias en la página.

Python Selenium vs Puppeteer

Cuando se hace una comparación utilizando Python, es esencial señalar las diferencias en las bibliotecas, la sintaxis y la integración con el diseño del sistema, ya que cambian la forma de abordar Python y estas dos herramientas. Veamos qué hace cada una con Python.

Selenium con Python

Como ya se ha comentado en temas anteriores, Proxy Selenium Python permite configurarlo desde donde se obtienen los recursos. Esto funciona bien para probar sitios web y rasparlos cuando hay restricciones usando servidores proxy.

La librería oficial de Python para Selenium sigue recibiendo soporte mediante actualizaciones con características y áreas de aplicación adicionales. En este caso, echemos un vistazo al ejemplo de instalarlo e iniciar un navegador utilizando WebDriver.

Para instalarlo en el entorno de desarrollo, introduzca el comando:


pip install selenium

A continuación, debe obtener WebDriver que corresponda a la versión de su navegador instalado:


from selenium import webdriver

# Crea un objeto navegador, cambia la ruta a tu controlador web en el código
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

Para iniciar e ir a un sitio donde se puede encontrar un elemento, se pueden utilizar los comandos "get" y "findElement".


# Abrir el sitio
driver.get('https://example.com')

# Extraer texto de un elemento
element = driver.find_element_by_tag_name('h1')
print(element.text)

# Cerrar el navegador
driver.quit()

Como podemos observar, en Selenium se implementa un enfoque síncrono; es decir, todo el código se ejecuta linealmente. Esto es conveniente a la hora de realizar la detección de errores.

Puppeteer con Python

No existen bibliotecas oficiales correspondientes en python. Existe un wrapper que lleva el mismo nombre, que puede instalarse con el comando siguiente:


npm install puppeteer

Además, la herramienta descarga Chromium automáticamente, lo que elimina la necesidad de instalar controladores independientes.

Puedes ejecutar el siguiente código para iniciar la aplicación y obtener una imagen:


//añadir biblioteca
const pt = require('puppeteer');
pt.launch().then(async browser => {
//navegador página nueva
const p = await browser.newPage();
//establecer el punto de vista de la página del navegador
await p.setViewport({ width: 1000, height: 500 })
//URL de lanzamiento
await p.goto('https://proxy-seller.com')
//capturar pantalla
await p.screenshot({
path: 'proxy-seller.png'
});
//navegador cerrado
await browser.close()
})

Una vez más, hay menos líneas de código para conseguir los mismos resultados, lo que hace que Python sea muy accesible a la hora de realizar operaciones asíncronas. La necesidad de una biblioteca oficial, además de otros punteros, puede suponer un grave obstáculo para los usuarios sin conocimientos de programación.

Características y capacidades

A la hora de seleccionar una herramienta para la automatización, merece la pena analizar tanto Puppeteer como Selenium. Ambas herramientas tienen numerosas funcionalidades relevantes para la automatización de navegadores web, sin embargo, algunas funcionalidades específicas pueden inclinar la elección a favor de una de las herramientas.

Compatibilidad con navegadores

Reflexionando sobre sus funcionalidades, es importante analizar el caso de Selenium que funciona con Google Chrome, Mozilla Firefox, Internet Explorer, Microsoft Edge, Opera y Safari ones. Esta particularidad la convierte en la mejor herramienta para realizar pruebas cross-browser y trabajar en entornos específicos como pruebas en diferentes sistemas operativos (macOS Safari).

Las debilidades de Selenium quedan expuestas en situaciones preocupantes como aquellas en las que se utilizan ejecutores de navegador. Puppeteer es mejor para Google Chrome con soporte experimental para Mozilla Firefox; esto, sin embargo, plantea límites a los proyectos que necesitan un amplio soporte multinavegador.

Modo sin cabeza y eficiencia de la automatización

Headless o "modo sin cabeza" se refiere a la ejecución del navegador sin interfaz gráfica de usuario con el objetivo de mejorar el rendimiento y los recursos del sistema. Ambas herramientas pueden funcionar en modo headless, pero la implementación difiere.

Con selenium, la ejecución de escenarios de prueba es mucho más lenta cuando la interfaz gráfica de usuario está activada, sin embargo, se prevé una ejecución más rápida cuando se establece la bandera de modo sin cabeza con la opción --headless.


from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')  # Activar el modo sin cabeza

En este caso, sólo están disponibles Google Chrome y Microsoft Edge. Aun así, realizan pruebas funcionales y entre navegadores, rellenan formularios y raspan datos de forma competente.

Del mismo modo, Puppeteer está diseñado en gran medida para funcionar en modo headless. Y esta activado por defecto. Para comprobar esto en el codigo, el parametro "headless" tiene que ser puesto a "true".


const browser = await puppeteer.launch({ headless: true });  // El modo Headless está activado por defecto

Esta herramienta realiza capturas de pantalla y vídeos de las interacciones del usuario con el sitio, así como de la navegación por páginas con mucho JavaScript y numerosas interacciones con el servidor. Esto es útil para depurar, informar o incluso analizar los movimientos de un usuario en línea.

Puppeteer también puede integrarse con sistemas CI/CD para que los scripts y las operaciones de data scraping se realicen en el servidor automáticamente. Si se trata de recopilar información sin revelar su dirección IP real, entonces cómo establecer un proxy en Puppeteer resolverá este problema.

Ejecución de JavaScript e interacción DOM

Selenium también proporciona medios para tratar con contenido dinámico utilizando el comando execute_script().

WebDriver entrega este comando al navegador utilizando APIs estándar. Aquí, se pasa a ChromeDriver o GeckoDriver y otros controladores asociados y se ejecuta al final del código.

¿Qué puede provocar un retraso en la ejecución del código?

Al tratar con Javascript asíncrono en una página, si se está utilizando con Selenium, lo más probable es que Selenium no tenga visibilidad en tiempo real de los cambios que están ocurriendo en la página durante su carga debido a algún retraso en los cambios reales de renderizado. Las esperas explícitas en este caso serán útiles para esperar hasta que los cambios se realicen y el contenido esté listo para la interacción, ejemplo: WebDriverWait.

Fuera de JavaScript, Selenium realiza trabajos con HTML y CSS ejecutados en el modelo de objetos del documento o DOM. Selenium interactúa con elementos en el DOM a través de ID (findelementbyid()), nombre (findelementbyname()), Xpath (findelementby_xpath()), y son capaces de realizar clics, escribir en formularios y campos, y extraer datos (texto, imagen, archivo, enlace).

La principal desventaja de esta herramienta en lo que respecta a JS y DOM es que, por desgracia, está vinculada al controlador, lo que tendrá algunas limitaciones en la forma en que se puede acceder a algunas funciones de las aplicaciones.

Cuando se trata de JS, Puppeteer utiliza el comando page.evaluate() que ejecuta javascript arbitrario dentro del contexto del navegador.

Para trabajar con el DOM, dispone de métodos como page.$() y page.(). Estos métodos permiten localizar elementos en la página, editarlos, recuperar información y manejar texto, formularios y campos. Al mismo tiempo, la interacción con el DOM es directa, sin necesidad de un controlador adicional.

Puppeteer vs Selenium: Ventajas y desventajas

Al evaluar la funcionalidad y comodidad de estas herramientas, como Selenium y Puppeteer, se pueden definir sus puntos fuertes y débiles.

Ventajas e inconvenientes del Selenium:

  • Compatibilidad con la mayoría de herramientas y sistemas operativos disponibles en la actualidad;
  • Muchos lenguajes de programación disponibles;
  • Se permite la integración de herramientas externas;
  • Adecuado para procedimientos de prueba complejos multitarea;
  • Apoyo oficial con amplio respaldo comunitario.

La principal desventaja de esta herramienta es la dependencia de WebDriver, que repercute negativamente en el rendimiento de la ejecución del escenario.

Pros y contras de los Puppeteer:

  • Desarrollado por Google, por lo que es el más adecuado para trabajar con Chrome y Chromium;
  • Excelente rendimiento al manejar contenidos dinámicos;
  • Modo Headless, adecuado para su uso en aplicaciones de servidor en las que el lanzamiento del navegador sin una interfaz gráfica de usuario aumenta significativamente el rendimiento;
  • Simplicidad: No es necesario instalar controladores adicionales ni configurar el entorno de desarrollo.

El inconveniente de utilizar esta biblioteca es la limitada compatibilidad con los navegadores, lo que reduce considerablemente el alcance de las posibles asignaciones.

Puppeteer vs Selenium: Resumen

Junto con otras herramientas de programación, Selenium y Puppeteer son valoradas por especialistas en AQS, DevOps, expertos en Web scraping y especialistas en SEO.

Para lograr los resultados deseados, es crucial evaluar consideraciones como el tipo de proyecto, la compatibilidad, la capacidad de respuesta y la capacidad de trabajo con contenidos dinámicos, por nombrar algunas.

Si su tarea incluye escenarios de prueba complejos que deben llevarse a cabo en múltiples plataformas y navegadores, Selenium será claramente la opción preferida. Es compatible con un gran número de ellos y ofrece mayor libertad en cuanto a la elección del lenguaje de programación.

Puppeteer se centra más en Chrome y Chromium. Es especialmente potente en el manejo de contenido dinámico y la ejecución de JavaScript. Web scraping, trabajar con aplicaciones AJAX y SPA, y la ejecución rápida de pruebas en Chrome pueden ser manejados por esta herramienta. Está optimizado para Windows y libre de inestabilidad durante el modo headless debido a la interacción directa con el protocolo DevTools.

Comentarios:

0 Comentarios