Latenode

Navegador headless en Python: las mejores bibliotecas para automatización

Explore las mejores bibliotecas de Python para la automatización con navegadores headless y compare sus ventajas en scraping web, pruebas y eficiencia de recursos.

13 min de lectura
Bibliotecas de Python para automatizar navegadores headless

Los navegadores headless le permiten automatizar tareas web sin mostrar una ventana visible del navegador. Son más rápidos, utilizan menos recursos y son ideales para web scraping, pruebas y mucho más. Python ofrece varias bibliotecas para la automatización de navegadores headless, cada una con ventajas únicas:

  • Selenium (2004): Funciona con varios navegadores, cuenta con un ecosistema maduro y es ideal para sistemas heredados.
  • Playwright (2020): Moderno, con soporte asíncrono, rápido e ideal para aplicaciones web modernas.
  • Pyppeteer (2017): Ligero, solo para Chromium, ideal para scripts rápidos.
  • Requests-HTML: Simple, rápido y óptimo para extraer contenido estático.

Comparación rápida

FunciónSeleniumPlaywrightPyppeteerRequests-HTML
Compatibilidad con navegadoresChrome, Firefox, IEChrome, Firefox, WebKitSolo ChromiumChromium (para JS)
Soporte asíncronoNoNo
Uso de recursosAltoMedioMedioBajo
Ideal paraSistemas heredadosAplicaciones web modernasScripts rápidosContenido estático

Si necesita una amplia compatibilidad con navegadores, opte por Selenium. Para aplicaciones modernas y un mejor rendimiento, Playwright es una mejor opción. Pyppeteer es ideal para tareas rápidas, mientras que Requests-HTML destaca en la extracción ligera de contenido estático. Elija la opción que mejor se adapte a las necesidades de su proyecto.

¿Qué es un navegador headless? ¿Cómo ejecutar Chrome Headless?

1. Selenium

Selenium, presentado por primera vez en 2004[2], es una herramienta consolidada para la automatización de navegadores que ofrece compatibilidad con múltiples navegadores y funciones avanzadas de automatización.

Instalación y configuración

Para empezar, instale Selenium mediante pip:

pip install selenium

Para configurar un navegador Chrome headless:

from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)

Compatibilidad con navegadores y funciones

Selenium 4 y las versiones posteriores incorporan administración automática de WebDriver y compatibilidad tanto con el protocolo WebDriver como con Chrome DevTools Protocol (CDP). Admite tres navegadores principales en modo headless, cada uno con sus ventajas:

NavegadorAspectos destacadosMejor caso de uso
ChromeEjecución rápida, herramientas para desarrolladoresAutomatización general, web scraping
FirefoxPrivacidad sólida, renderizado fiableTareas centradas en la seguridad
EdgeIntegración con Windows, basado en ChromiumAutomatización específica de Windows

Optimización del rendimiento

Para mejorar el rendimiento de Selenium, considere estas estrategias:

  • Gestión de recursos
    Desactive recursos innecesarios (como imágenes), establezca tiempos de espera para la carga de páginas y utilice esperas dinámicas para reducir retrasos.

  • Localización eficiente de elementos
    Utilice métodos precisos para localizar elementos e interactuar más rápido:

    element = driver.find_element(By.ID, "search-input")
    
  • Gestión de instancias del navegador
    Gestione con cuidado las instancias del navegador para evitar el consumo excesivo de recursos:

    driver.set_page_load_timeout(30)
    driver.quit()  # Clean up resources
    

Funciones avanzadas

Selenium ofrece varias capacidades avanzadas:

  • Omitir la detección anti-bot con herramientas como Undetected ChromeDriver
  • Pruebas entre navegadores
  • Control de red para una automatización más profunda
  • Ejecución de JavaScript para interacciones personalizadas

Aunque Selenium puede requerir una configuración mayor en comparación con herramientas como Playwright, su amplia compatibilidad con navegadores y sistemas más antiguos, incluido Internet Explorer, lo convierten en una opción sólida para proyectos de automatización complejos. Su ecosistema maduro garantiza fiabilidad para una amplia variedad de casos de uso.

2. Playwright

Playwright, desarrollado por Microsoft, ofrece una forma rápida y fiable de automatizar navegadores headless mediante comunicación directa con el protocolo Chrome DevTools.

Instalación y configuración

Para empezar con Playwright, instálelo mediante pip y configure los binarios de navegador necesarios:

pip install playwright
playwright install  # Installs browser binaries

A continuación se muestra un ejemplo de script básico:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    # Add your automation tasks here
    browser.close()

Una vez instalado, puede explorar las capacidades y el rendimiento de Playwright.

Rendimiento y funciones

Playwright destaca por utilizar una comunicación eficiente basada en WebSocket, a diferencia de los métodos tradicionales de Selenium. En pruebas de rendimiento, Playwright completó 100 iteraciones en 290,37 ms, frente a los 536,34 ms de Selenium [1].

Algunas funciones clave incluyen:

  • Espera automática: Espera automáticamente a que los elementos estén listos, lo que reduce la necesidad de tiempos de espera manuales.
  • Grabación de vídeo: Compatibilidad integrada para grabar sesiones de depuración.
  • Compatibilidad entre navegadores: Funciona con Chromium, Firefox y WebKit.
  • Contextos de navegador aislados: Garantiza el aislamiento de las pruebas al separar las sesiones del navegador.

Comparación de compatibilidad con navegadores

A continuación se muestra un vistazo rápido a la compatibilidad con el modo headless en los navegadores de Playwright:

NavegadorModo headless
ChromiumActivado de forma predeterminada
FirefoxCompatible
WebKitCompatible

Buenas prácticas

Para aprovechar al máximo Playwright, siga estos consejos:

  • Aproveche la espera integrada

En lugar de codificar retrasos fijos, utilice la espera automática de Playwright:

# Avoid time.sleep()
page.wait_for_selector('#element')
  • Utilice contextos de navegador

Los contextos de navegador proporcionan un entorno limpio para cada prueba:

context = browser.new_context()
page = context.new_page()
# Perform tasks within this context
context.close()

Gestionar correctamente las instancias del navegador es especialmente importante en entornos con múltiples hilos.

Consideraciones sobre hilos

Dado que la API de Playwright no es segura para hilos, necesitará una instancia independiente para cada hilo [3]:

def thread_function():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        # Perform thread-specific tasks
        browser.close()

Playwright es muy adecuado para proyectos modernos de automatización web. Sus herramientas de depuración y su generador de código pueden ahorrar tiempo a los desarrolladores frente a frameworks más antiguos. Aunque el tamaño de su comunidad (116K repositorios de GitHub) es menor que el de Selenium (283K repositorios) [1], su rápido crecimiento y el respaldo de Microsoft indican un futuro prometedor.

sbb-itb-23997f1

3. Pyppeteer

Pyppeteer es un port no oficial de Puppeteer para Python, diseñado para automatizar navegadores basados en Chromium. A pesar de su tamaño reducido, ofrece potentes herramientas para la automatización web.

Instalación y configuración básica

Para utilizar Pyppeteer, necesitará Python 3.6 o posterior. Instálelo mediante pip con los siguientes comandos:

pip install pyppeteer
pyppeteer-install  # Downloads Chromium (~150MB)

A continuación se muestra un script sencillo que demuestra sus funciones asíncronas:

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://example.com')
    await page.screenshot({'path': 'screenshot.png'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

Información sobre el rendimiento

Las pruebas indican que Pyppeteer se ejecuta aproximadamente un 30 % más rápido que Playwright en scripts cortos [5]. Su diseño asíncrono también lo hace eficiente al gestionar varias tareas al mismo tiempo.

Funciones y limitaciones principales

FunciónDetalles
Compatibilidad con navegadoresSolo Chromium
Soporte asíncronoIntegrado
Renderizado de JavaScriptTotalmente compatible
Uso de memoriaMenor en comparación con Selenium
Tamaño de instalaciónCompacto (~150MB con Chromium)
Pruebas entre navegadoresNo compatible

Consejos para optimizar el rendimiento

Para mejorar el rendimiento de Pyppeteer, reutilice la misma instancia del navegador para varias tareas en lugar de abrir instancias nuevas:

browser = await launch()

for task in tasks:
    page = await browser.newPage()
    # Perform operations
    await page.close()
await browser.close()

Este enfoque puede ayudar a reducir la sobrecarga y acelerar sus scripts.

Gestión de errores

Un problema común es el error "Browser Closed Unexpectedly", que suele deberse a dependencias de Chromium ausentes [4]. Ejecutar pyppeteer-install garantiza que todos los componentes necesarios estén disponibles.

"Pyppeteer es una herramienta para automatizar un navegador Chromium con código, que permite a los desarrolladores de Python obtener capacidades de renderizado de JavaScript para interactuar con sitios web modernos y simular mejor el comportamiento humano." - ZenRows [4]

Dado que solo es compatible con Chromium, Pyppeteer es más adecuado para proyectos centrados en web scraping y automatización basados en Chrome. Es una excelente opción si las pruebas entre navegadores no son prioritarias.

4. Requests-HTML

Requests-HTML es una herramienta ligera para web scraping que combina la simplicidad de Requests con potentes capacidades de análisis HTML. Es especialmente rápida y eficiente al trabajar con contenido estático.

Instalación y configuración

Para utilizar Requests-HTML, asegúrese de tener Python 3.6 o posterior. Instálelo con:

pip install requests-html

Si activa el renderizado de JavaScript por primera vez, la biblioteca descargará automáticamente Chromium (150MB) en su directorio personal (`/.pyppeteer/`).

Pruebas de rendimiento

Requests-HTML supera a herramientas basadas en navegador como Selenium en términos de velocidad. A continuación se muestra una comparación de pruebas recientes [6]:

Tipo de operaciónRequests-HTMLSelenium
Solicitudes de API0,11 s ± 0,01 s5,16 s ± 0,04 s
Extracción de texto0,28 s ± 0,01 s5,32 s ± 0,09 s

Estos datos destacan cómo Requests-HTML sobresale en tareas que requieren respuestas rápidas.

Funciones y capacidades principales

A continuación se muestra un ejemplo rápido de cómo utilizar Requests-HTML:

from requests_html import HTMLSession

session = HTMLSession()
r = session.get('https://example.com')

r.html.links           # Extract all links
r.html.absolute_links  # Extract absolute URLs

# Enable JavaScript rendering
r.html.render()        

Algunas de sus funciones más destacadas incluyen:

  • Selectores CSS (similares a jQuery)
  • Compatibilidad con XPath
  • Gestión automática de redirecciones
  • Agrupación de conexiones
  • Persistencia de cookies
  • Cadenas de user-agent simuladas para una mayor flexibilidad

Consejos para optimizar el rendimiento

Para obtener el mejor rendimiento:

  • Limite el renderizado de JavaScript para reducir la sobrecarga de Chromium.
  • Reutilice objetos de sesión para varias solicitudes.
  • Opte por selectores CSS en lugar de XPath para consultas más simples y rápidas.

Limitaciones y casos de uso

AspectoDetalles
Soporte de JavaScriptDisponible, pero debe activarse explícitamente
Uso de memoriaBajo para contenido estático; mayor con renderizado de JS
AutenticaciónRequiere configuración manual
Gestión de CAPTCHAFuncionalidad limitada

"Utilice requests si necesita una forma rápida, ligera y fiable de obtener contenido web estático o datos de API." - Joseph McGuire [6]

Requests-HTML es ideal para tareas en las que la velocidad y la eficiencia de recursos son fundamentales. Por ejemplo, extraer páginas web estáticas tarda solo milisegundos, frente a varios segundos con herramientas como Selenium [6].

Optimización de recursos

Requests-HTML minimiza el uso de ancho de banda al cargar únicamente los recursos que solicita. Esto puede reducir considerablemente los costes de proxy en proyectos que dependen de modelos de precios basados en el ancho de banda [7]. Su diseño eficiente no solo acelera la ejecución, sino que también reduce el consumo de recursos.

Para proyectos centrados en contenido estático, Requests-HTML ofrece una solución ágil y eficiente en comparación con herramientas de automatización de navegadores más pesadas. Esto lo convierte en una opción sólida en casos donde la velocidad y el ahorro de recursos son prioritarios.

Tabla comparativa de bibliotecas

A continuación se presenta una comparación detallada de las bibliotecas de navegadores headless para Python en función de sus características, rendimiento y eficiencia de recursos.

Funciones y capacidades principales

FunciónSeleniumPlaywrightPyppeteerRequests-HTML
Compatibilidad con navegadoresChrome, Firefox, Safari, IEChrome, Firefox, WebKitSolo ChromiumChromium (para JS)
Soporte de JavaScriptCompletoCompletoCompletoLimitado
Soporte asíncronoNoNo
Complejidad de instalaciónAlta (se necesita WebDriver)MediaMediaBaja
Uso de recursosAltoMedioMedioBajo
Tamaño de la comunidadMás de 283K repositoriosMás de 116K repositoriosModeradoPequeño

Estas funciones ofrecen una visión general de las ventajas y limitaciones de cada biblioteca, y sientan las bases para un análisis más detallado.

Pruebas de rendimiento

Las pruebas comparativas destacan diferencias clave de rendimiento [1][5]:

OperaciónPlaywrightSeleniumPyppeteer
Tiempo de ejecución290,37 ms536,34 ms~203 ms
Intensidad de recursosMediaAltaMedia
Uso de memoriaModeradoAltoModerado

Playwright y Pyppeteer muestran tiempos de ejecución más rápidos que Selenium, y Pyppeteer lidera el rendimiento en scripts cortos.

Funciones de desarrollo y depuración

Las herramientas de depuración y el soporte para desarrollo varían considerablemente entre estas bibliotecas:

FunciónSeleniumPlaywrightPyppeteerRequests-HTML
Herramientas de depuraciónBásicasAvanzadasBásicasLimitadas
Funciones de espera automáticaManualesIntegradasBásicasN/A
Compatibilidad multiplataformaLimitada
Soporte técnicoComunidadDocumentación + comunidadLimitadoBásico

Playwright destaca por sus herramientas avanzadas de depuración y funciones de espera automática integradas, lo que lo hace ideal para proyectos complejos.

Optimización por caso de uso

Las distintas bibliotecas destacan en casos específicos:

Caso de usoBiblioteca recomendadaMotivo
Sistemas heredadosSeleniumAmplia compatibilidad con navegadores
Aplicaciones web modernasPlaywrightSoporte asíncrono y ejecución más rápida
Contenido estáticoRequests-HTMLLigero y eficiente
Scripts rápidosPyppeteerEjecución rápida y funciones equilibradas

Cada biblioteca tiene su nicho, según los requisitos del proyecto.

Eficiencia de recursos

El uso de recursos varía significativamente entre las bibliotecas:

BibliotecaUso de CPUHuella de memoriaEficiencia de ancho de banda
SeleniumAltoAltaModerada
PlaywrightMedioMediaAlta
PyppeteerMedioMediaAlta
Requests-HTMLBajoBajaMuy alta

Para contenido estático, Requests-HTML es la opción más eficiente, mientras que Playwright equilibra rendimiento y uso de recursos para aplicaciones dinámicas.

Pyppeteer supera a Playwright en la ejecución de scripts cortos y funciona casi un 30 % más rápido [5]. Sin embargo, la mayor compatibilidad con navegadores y las herramientas avanzadas de depuración de Playwright lo convierten en una mejor opción para tareas más exigentes de nivel empresarial.

¿Qué biblioteca debería elegir?

Seleccionar la biblioteca de navegador headless adecuada depende de sus necesidades específicas de automatización y de su configuración técnica. Según las comparaciones anteriores, así puede decidir.

Si trabaja con aplicaciones web modernas, Playwright es una opción sólida. Superó a Selenium en las pruebas comparativas y completó tareas en solo 290,37 milisegundos, frente a los 536,34 milisegundos de Selenium[1]. Su soporte asíncrono y sus herramientas avanzadas de depuración lo hacen muy adecuado para gestionar tareas de automatización complejas.

Para sistemas empresariales o heredados, Selenium es una opción fiable. Con más de 283.000 repositorios de GitHub dedicados a esta herramienta[1], Selenium ofrece una gran cantidad de recursos de la comunidad, compatibilidad con navegadores antiguos como Internet Explorer y automatización en dispositivos reales.

Para entornos con recursos limitados, esta es una guía rápida:

Tipo de entornoBiblioteca recomendadaVentaja principal
Contenido estáticoRequests-HTMLBajo uso de recursos
Contenido dinámicoPyppeteerLigero con operaciones asíncronas

En configuraciones de integración continua (CI), Playwright destaca. Se integra sin problemas con plataformas como GitHub Actions[8], admite pruebas en paralelo y ayuda a reducir las pruebas inestables, por lo que es una excelente opción para pipelines de CI/CD.

En última instancia, su elección debe centrarse en sus objetivos de automatización. Playwright es excelente para la automatización web moderna, mientras que Selenium ofrece una compatibilidad más amplia con navegadores y opciones de prueba en dispositivos reales[1].

References

FAQ

Frequently Asked Questions

Un navegador headless en Python ejecuta interacciones web automatizadas sin mostrar una interfaz gráfica, lo que hace que el scraping, las pruebas y la automatización de formularios sean más rápidos y eficientes en el uso de recursos.

¿Te resultó útil? Compártelo →

Escrito por

Vasiliy Datsenko

Jefe de Soporte al Cliente

Vasiliy Datsenko es Jefe de Soporte al Cliente en Latenode y un escritor de automatización centrado en productos. Su trabajo conecta las conversaciones con los clientes, la investigación sobre automatización de flujos de trabajo, los casos de uso de IA y la educación práctica sobre productos para equipos que intentan automatizar procesos comerciales reales.

Perfil del autor →

Verificado por

Oleg Zankov

CEO Latenode, No-code Expert

Con una ética arraigada en la innovación, la resolución de problemas y la experiencia de usuario, me enfoco en capacitar a los equipos para crear integraciones personalizadas y automatizar flujos de trabajo con facilidad y eficiencia. Trayendo una gran experiencia en desarrollo empresarial, emprendimiento tecnológico y desarrollo de software, reconocí la necesidad de una solución de integración más accesible, escalable y adaptable. Así nació Latenode.com. Con nuestra plataforma, las empresas pueden aprovechar el poder de la tecnología sin necesidad de conocimientos extensos de codificación. Apasionado por fomentar un futuro donde la tecnología nos sirva, y no al revés, mi misión es simplificar procesos complejos. Creo en democratizar la tecnología y equipar a los equipos con las herramientas para innovar, crecer y tener éxito en un mundo cada vez más digital.

Perfil del autor →

Seguir leyendo