Latenode

Configuración del modo headless en Puppeteer: equilibrio entre velocidad y funcionalidad

Explore las diferencias entre los modos headless y con interfaz gráfica en Puppeteer para optimizar la automatización, la depuración y el rendimiento de sus proyectos.

9 min de lectura
Navegador Puppeteer en modos headless y con interfaz gráfica

Puppeteer le permite automatizar navegadores Chrome o Chromium, y elegir entre el modo headless o con interfaz gráfica puede afectar significativamente al rendimiento y la depuración. A continuación, un resumen rápido:

  • Modo headless: Más rápido, utiliza menos recursos e ideal para automatización y tareas de producción como extracción de datos web o pruebas.
  • Modo con interfaz gráfica: Interfaz visual del navegador, mejor para depuración y desarrollo.

Comparación rápida

FunciónModo headlessModo con interfaz gráfica
Interfaz visualSin GUIGUI completa
Uso de recursosMenorMayor
Velocidad de ejecuciónMás rápidaEstándar
Uso de memoriaMenorMayor
Facilidad de depuraciónBasada en consolaComentarios visuales

El nuevo modo headless combina el rendimiento del modo headless con herramientas de depuración mejoradas, lo que lo convierte en una opción equilibrada para muchos flujos.

Elija:

  • Headless estándar para la eficiencia en CI/CD o producción.
  • Nuevo headless para depuración avanzada y funcionalidades modernas.
  • Modo con interfaz gráfica para depuración visual y pruebas de elementos interactivos.

Esta guía explica cómo configurar cada modo, sus ventajas y cuándo utilizarlos.

Puppeteer - Modos headless y con interfaz gráfica

1. Modo headless estándar

El modo headless estándar es la configuración predeterminada de Puppeteer y ejecuta Chrome o Chromium sin su interfaz gráfica de usuario (GUI). Al omitir la GUI, utiliza menos memoria, procesa las páginas más rápido y reduce el uso de CPU.

Funciones principales

El modo headless estándar admite una amplia variedad de operaciones del navegador, entre ellas:

FunciónQué hace
Simulación de usuarioGestiona clics, entradas de formularios y navegación
Manipulación de contenidoInyecta JavaScript y modifica el DOM
Generación de recursosCaptura pantallas y crea PDF
Monitorización de redRastrea solicitudes y respuestas
Automatización de páginasEjecuta scripts y extrae contenido

Cómo usarlo

Puede iniciar el modo headless con el siguiente código:

const browser = await puppeteer.launch(); // Default headless
// OR
const browser = await puppeteer.launch({ headless: true }); // Explicit headless

Por qué es útil

El modo headless es ideal para tareas como extracción de datos web, pruebas automatizadas y creación de capturas de pantalla o PDF. Por ejemplo, Optimizely redujo su ciclo de pruebas de 24 horas a solo una hora al aprovechar las pruebas de navegador headless en la nube [1].

Desafíos que debe tener en cuenta

Aunque es eficiente, el modo headless presenta algunos obstáculos:

  • Algunos sitios web pueden detectar y bloquear navegadores headless.
  • La depuración es más difícil sin comentarios visuales.
  • Las interacciones de usuario más complejas pueden requerir configuración adicional.

Para mejorar la fiabilidad y evitar la detección, puede:

  • Configurar una cadena de user-agent personalizada.
  • Añadir retrasos entre las acciones automatizadas.
  • Utilizar mecanismos sólidos de gestión de errores.
  • Asegurarse de que la página esté completamente cargada antes de extraer datos.

Para lograr una eficiencia aún mayor en tareas específicas del lado del servidor, puede considerar la variante chrome-headless-shell. Esta opción ligera es perfecta para flujos centrados en la automatización. Iníciela con:

const browser = await puppeteer.launch({ headless: 'shell' });

Este modo es especialmente eficaz para operaciones del lado del servidor y ofrece un rendimiento optimizado.

A continuación, profundizaremos en el nuevo modo headless de Chrome y en cómo lleva el rendimiento al siguiente nivel.

2. Nuevo modo headless de Chrome

Chrome ha introducido un modo headless mejorado que lleva la automatización del navegador a un nuevo nivel. A diferencia de la versión anterior, este modo utiliza la misma base de código que el navegador Chrome habitual, lo que garantiza una mayor estabilidad y acceso a todas las funciones del navegador. Combina la eficiencia de la operación headless con la funcionalidad de un navegador completo, haciendo que la automatización y la depuración sean mucho más fluidas.

Funciones principales

El nuevo modo headless funciona creando ventanas de plataforma sin mostrarlas. Esto le permite utilizar todas las capacidades del navegador y seguir disfrutando de las ventajas de rendimiento de la operación headless. Así puede usarlo en su código:

const browser = await puppeteer.launch({ headless: 'new' }); // Explicitly use new headless mode
// OR
const browser = await puppeteer.launch({ headless: true }); // Defaults to new headless mode

Herramientas de depuración

Este modo también incluye varias herramientas para facilitar la depuración:

FunciónPropósito
Inspección visualVisualice el comportamiento del navegador (configure headless: false)
Temporización de operacionesUtilice la opción slowMo para retrasar las acciones
Monitorización de consolaCapture la salida de la consola para analizarla
Análisis de protocolosActive el registro del protocolo DevTools
Diagnóstico del navegadorUtilice dumpio: true para obtener registros detallados

Resolución avanzada de problemas

1. Uso de DevTools para depuración

Puede habilitar las DevTools integradas de Chrome para inspeccionar el comportamiento del navegador en detalle:

const browser = await puppeteer.launch({
  headless: 'new',
  devtools: true
});

2. Monitorización del rendimiento y seguimiento de errores

La base de código compartida permite crear perfiles de rendimiento precisos y resolver errores. Utilice esta configuración para supervisar y depurar operaciones tanto del lado del cliente como del servidor:

const browser = await puppeteer.launch({
  headless: 'new',
  devtools: true,
  slowMo: 100,
  args: ['--enable-logging', '--v=1']
});

Guía de migración

Aunque el modo headless anterior (headless: 'old') sigue disponible, es recomendable cambiar a la nueva versión. El modo heredado dejará de utilizarse con el tiempo, por lo que realizar la transición ahora garantiza la coherencia y le prepara para futuras actualizaciones.

Ventajas de rendimiento

Al utilizar una base de código unificada, el nuevo modo headless ofrece un comportamiento coherente en diferentes entornos. Esta coherencia reduce los problemas específicos de cada entorno y mejora la fiabilidad de los flujos automatizados.

sbb-itb-23997f1

3. Modo de visualización del navegador

El modo de visualización del navegador abre una ventana visible durante las operaciones de Puppeteer. Aunque utiliza más recursos, ofrece mejores herramientas de depuración y comentarios visuales.

Consideraciones de rendimiento

La ejecución en modo de visualización aumenta el uso de recursos, pero proporciona algunas ventajas:

const browser = await puppeteer.launch({
  headless: false,
  args: ['--enable-gpu-rasterization'],
  defaultViewport: null
});

Con un navegador visible, puede habilitarse la aceleración por hardware de la GPU, lo que mejora el rendimiento en sitios web con muchas imágenes. Además, este modo reduce las probabilidades de detección de bots al imitar el comportamiento estándar del navegador.

Funciones de depuración mejoradas

El modo de visualización es ideal para resolver problemas y ofrece comentarios visuales inmediatos. Esta es una configuración útil para la depuración:

const browser = await puppeteer.launch({
  headless: false,
  devtools: true,
  slowMo: 250,
  defaultViewport: {
    width: 1920,
    height: 1080
  }
});

Esta configuración abre DevTools automáticamente, introduce un retraso de 250 ms para facilitar la inspección y utiliza un tamaño de viewport estándar para obtener pruebas coherentes.

Casos de uso

CasoVentajasConsejos de configuración
Depuración visualVea las interacciones en tiempo realHabilite DevTools y use slowMo
Pruebas de GUIObserve los comportamientos de la interfaz de usuarioConfigure un tamaño de viewport fijo
Flujos complejosVerifique interacciones detalladasCombínelo con el registro de consola

Consejos de optimización

Para que todo funcione correctamente en modo de visualización:

  • Gestione los recursos: Cierre las pestañas y ventanas que no utilice para ahorrar memoria.
  • Supervise el rendimiento: Habilite el registro del navegador para rastrear las métricas de rendimiento.
  • Utilice aceleración por GPU: Active las funciones de GPU para tareas que impliquen gráficos exigentes.

"A veces resulta útil ver lo que muestra el navegador. En lugar de iniciar el navegador en modo headless, inicie una versión completa del navegador con headless configurado como false." - Documentación de Puppeteer [2]

Configuración avanzada

Para tareas más exigentes, puede mejorar el modo de visualización con ajustes adicionales:

const browser = await puppeteer.launch({
  headless: false,
  args: [
    '--enable-gpu-rasterization',
    '--window-size=1920,1080',
    '--disable-web-security'
  ],
  dumpio: true
});

Esta configuración mejora la visibilidad, habilita registros detallados y permite el acceso entre orígenes. Estos ajustes garantizan una experiencia más fluida y sientan las bases para comparar el rendimiento y la funcionalidad en la siguiente guía.

Guía de comparación de modos

Al configurar Puppeteer, cada modo ofrece una combinación diferente de velocidad, uso de recursos y capacidades de depuración. Elegir el adecuado depende de sus necesidades específicas.

A continuación, se presenta un desglose de los modos:

  • Modo headless estándar
    Este modo está diseñado para la eficiencia y el inicio rápido, por lo que es perfecto para pruebas automatizadas o canalizaciones de CI/CD. Utiliza recursos mínimos del sistema y proporciona resultados básicos de depuración a través de la consola.
  • Nuevo modo headless
    Combina funciones de depuración sólidas con un rendimiento cercano al del modo headless estándar. Es una buena opción para tareas que requieren una combinación de velocidad y funcionalidad.
  • Modo de visualización del navegador
    Este modo le proporciona acceso completo a Chrome DevTools y ofrece comentarios visuales en tiempo real. Es ideal para depuración detallada o para analizar flujos complejos. Aunque exige más recursos del sistema, admite tareas que se benefician de la aceleración por hardware y controles de red avanzados.

Puppeteer aprovecha el Chrome DevTools Protocol para un control preciso del navegador, incluida la interceptación de red y la ejecución de JavaScript, lo que le permite ajustar las configuraciones.

Por ejemplo, así puede optimizar el nuevo modo headless:

const browser = await puppeteer.launch({
  headless: 'new',
  args: [
   '--disable-gpu',
   '--no-sandbox',
   '--disable-setuid-sandbox'
  ]
});

Utilice el modo headless estándar para una automatización rápida y eficiente en recursos, el modo de visualización del navegador para depuración detallada o el nuevo modo headless cuando necesite un equilibrio entre rendimiento y funcionalidad.

Elegir el modo adecuado

Al seleccionar un modo en Puppeteer, tenga en cuenta los objetivos y requisitos específicos de su proyecto. Puppeteer hace hincapié en la velocidad, la seguridad, la estabilidad y la simplicidad [3]. A continuación, se presenta un desglose que le ayudará a decidir:

El modo headless estándar es ideal si necesita:

  • Máximo rendimiento utilizando recursos mínimos
  • No requiere depuración visual ni renderizado del navegador
  • Una opción fiable para entornos de CI/CD

El nuevo modo headless funciona mejor cuando necesita:

  • Herramientas de depuración avanzadas sin sacrificar el rendimiento
  • Compatibilidad con funcionalidades web modernas
  • Un equilibrio entre uso de recursos y funcionalidad
  • Acceso a la mayoría de las funciones de Chrome DevTools Protocol

El modo de visualización del navegador es adecuado para casos que implican:

  • Necesidades de depuración detallada
  • Confirmación visual de los flujos de automatización
  • Desarrollo y pruebas de elementos interactivos
  • Uso de aceleración por hardware

Casos de uso y recomendaciones habituales:

Tipo de proyectoModo recomendadoVentaja principal
Pruebas de canalizaciones CI/CDHeadless estándarEjecución rápida con uso mínimo de recursos
Desarrollo y depuraciónVisualización del navegadorComentarios visuales completos y DevTools
Automatización de producciónNuevo headlessUna combinación sólida de funciones y rendimiento

La API de Puppeteer facilita el cambio entre estos modos a medida que evoluciona su proyecto.

References

FAQ

Frequently Asked Questions

El modo headless ejecuta Chrome o Chromium sin una interfaz gráfica visible, consume menos recursos y se ejecuta más rápido; es ideal para CI/CD, scraping y automatización en producción. El modo con interfaz gráfica (headless: false) abre una ventana visible del navegador con acceso completo a DevTools, lo que resulta más adecuado para la depuración visual y las pruebas interactivas.

¿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