es
English
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski 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.
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:
Las condiciones especificadas anteriormente deben cumplirse para habilitar el siguiente algoritmo de gestión:
Estas operaciones son necesarias para completar los pasos siguientes:
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.
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:
Si todos los ajustes se han realizado correctamente, la interacción con el navegador se estructurará de acuerdo con el siguiente escenario:
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:
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.
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.
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.
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.
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.
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.
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.
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.
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:
El Selenium se aplica para:
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.
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.
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.
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.
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.
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.
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.
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.
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:
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:
El inconveniente de utilizar esta biblioteca es la limitada compatibilidad con los navegadores, lo que reduce considerablemente el alcance de las posibles asignaciones.
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