Latenode

Instalación y configuración de Puppeteer: resolución de problemas comunes de dependencias y Chromium

Aprenda a instalar y configurar Puppeteer para la automatización de navegadores, solucionar problemas frecuentes y optimizar su configuración para mejorar el rendimiento.

12 min de lectura
Configuración de Puppeteer con dependencias de Chromium

¿Quiere automatizar Chrome o Chromium fácilmente? Puppeteer es una biblioteca de Node.js que simplifica la automatización de navegadores, ideal para tareas como pruebas y scraping. Esto es lo que aprenderá:

  • Integración directa en Latenode: Descubra cómo Latenode mejora los flujos de scraping web con una integración directa con un navegador headless basado en Puppeteer y funciones diseñadas para la automatización. No necesita preconfigurar nada: simplemente añada el nodo y úselo en la automatización de flujos.
  • Requisitos de configuración: Use Node.js 18+ y asegúrese de que su sistema cumpla las dependencias específicas de su sistema operativo.
  • Opciones de instalación: Instale Puppeteer con npm i puppeteer (incluye Chrome for Testing) o npm i puppeteer-core (utilice su propio navegador).
  • Consejos de resolución de problemas: Solucione errores de inicio de Chromium, bibliotecas faltantes y conflictos de dependencias.
  • Configuraciones avanzadas: Optimice el rendimiento, configure proxies y gestione variables de entorno.

Antes de compartir una guía completa sobre los problemas de configuración de Puppeteer, debe saber que puede omitirla y utilizar un nodo de integración directa listo para usar en Latenode. Échele un vistazo:

Omita la configuración de Puppeteer: use nuestra integración lista para usar en Latenode

Latenode funciona perfectamente con Puppeteer para simplificar la automatización de navegadores. A continuación, exploraremos las funciones de Latenode y cómo utilizar una integración directa con Puppeteer para sus necesidades de automatización.

Estas son las principales funciones de Latenode:

FunciónDescripciónBeneficio
Navegador headlessIntegración con la biblioteca PuppeteerControl directo del navegador
Asistente de código con IAGeneración automatizada de códigoAcelera la depuración y la programación
Flexibilidad sin códigoMás de 300 integraciones sin código para ajustes de flujo personalizadosAmplía la funcionalidad de Puppeteer
Compatibilidad con paquetes NPMAcceso a más de 1 millón de paquetesPotencia las capacidades de automatización

"Lo que más me gustó de Latenode frente a la competencia es que tenía la posibilidad de escribir código y crear nodos personalizados." - Germaine H., fundadora de Information Technology [3]

Herramientas de Latenode

Latenode ofrece integración con el nodo de navegador headless, basado en Puppeteer, que le permite añadir código directamente en el editor y utilizarlo para tareas como extraer toda la información disponible de un sitio web, tomar capturas de pantalla de páginas, completar formularios y, en general, cualquier cosa compatible con Puppeteer.

Para encontrar esta integración, simplemente vaya a la carpeta Code Integrations de la biblioteca de nodos, donde encontrará el nodo de navegador headless. Añádalo a su script, haga clic en él y se abrirá un editor donde podrá añadir código de cualquier complejidad y longitud. Además, puede especificar la dirección, el usuario y la contraseña de su proxy en la configuración.

Conexión de un navegador headless basado en Puppeteer con otras integraciones

Pero un solo nodo no es suficiente para la automatización. Para una mayor personalización, añada un desencadenador y otra acción. Por ejemplo, un desencadenador webhook y una respuesta para supervisar cambios en los tipos de cambio del Banco de Inglaterra, como mostramos en la guía anterior. Aquí tiene un flujo:

FLUJO

¿Por qué elegir la integración de Latenode en lugar de una solución basada en VPS?

"Latenode supera ampliamente a la competencia con un 99 % de tiempo de actividad, precios asequibles basados en ejecuciones y una interfaz fácil de usar." - Hammad Hafeez [3]

Los precios de Latenode se basan en el tiempo de ejecución en lugar de tareas individuales, lo que la convierte en una opción económica para la automatización de Puppeteer a gran escala. Esta plataforma permite a los desarrolladores centrarse en crear flujos sólidos sin preocuparse por costes excesivos.

Para maximizar la eficiencia, puede utilizar la integración de Latenode con JavaScript, así como más de 300 integraciones con bases de datos, CRM, herramientas de gestión de proyectos y modelos de IA como Claude, ChatGPT y Gemini. Existen muchos casos de uso potenciales: prospección automatizada, gestión de bases de datos, scraping web, etc. Al combinar Latenode y Puppeteer, puede centralizar y optimizar sus procesos de automatización.

sbb-itb-23997f1

Si todavía desea una guía para solucionar problemas de Puppeteer, consulte el desglose a continuación.

¿No se pudo iniciar Chromium en VPS? Instale las dependencias faltantes de Puppeteer en VPS

Antes de empezar

Antes de instalar Puppeteer, asegúrese de que su configuración cumpla las dependencias necesarias para garantizar una instalación y un funcionamiento fluidos.

Configuración de Node.js

Puppeteer requiere Node.js para ejecutarse. Las últimas versiones de Puppeteer funcionan con Node.js versión 18 o superior, lo que se ajusta a la versión LTS actual.

Para comprobar su versión de Node.js, use este comando:

node --version

Si su versión es inferior a 18, actualice Node.js antes de continuar. Se recomienda encarecidamente utilizar la versión LTS más reciente. Tras confirmar su versión de Node.js, compruebe los requisitos del sistema operativo.

Requisitos del sistema

Los requisitos del sistema para Puppeteer dependen del sistema operativo que utilice. A continuación, encontrará un resumen rápido:

Sistema operativoArquitecturaComponentes necesariosTamaño de descarga aprox.
Windowsx64Chrome for Testing~280MB
macOSx64, arm64Chrome for Testing~170MB
Debian/Ubuntux64Chrome for Testing + bibliotecas~282MB

Al instalar Puppeteer, descargará automáticamente una versión compatible de Chrome for Testing. El tamaño de descarga varía en función de su sistema operativo (~280MB para Windows, ~170MB para macOS y ~282MB para Debian/Ubuntu Linux) [1].

Para los usuarios de Linux, especialmente en Debian/Ubuntu, deberá instalar algunas bibliotecas adicionales. Utilice el siguiente comando:

apt-get install -y libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxi6 libxtst6 libnss3 libcups2 libxss1 libxrandr2 libasound2 libatk1.0-0 libgtk-3-0

Estos son algunos consejos adicionales para entornos específicos:

  • AWS EC2 Amazon Linux: Active el repositorio EPEL e instale Chromium antes de configurar Puppeteer.
  • Entornos Docker: Añada las bibliotecas compartidas necesarias y el paquete Chromium a su Dockerfile.
  • Proyectos de TypeScript: Utilice TypeScript versión 4.7.4 o superior para acceder a las definiciones de tipos más recientes de Puppeteer y mejorar la compatibilidad con el IDE.

Pasos básicos de instalación

Una vez que haya confirmado su configuración de Node.js y los requisitos del sistema, puede instalar Puppeteer mediante npm.

Guía de instalación con npm

Tiene dos formas de instalar Puppeteer mediante npm:

  • Instalación estándar: Esta opción descarga automáticamente Chrome for Testing:

    npm i puppeteer
    
  • Instalación Core: Utilice esta opción si desea gestionar los navegadores por separado y omitir la descarga de Chrome for Testing:

    npm i puppeteer-core
    

Con la instalación estándar, Chrome for Testing y el binario chrome-headless-shell se descargan en $HOME/.cache/puppeteer. Consulte la sección Requisitos del sistema para conocer los detalles sobre los tamaños de descarga.

Una vez instalado, estará listo para probar su configuración.

Pruebe su configuración

Comience creando un archivo llamado test.js y añada el siguiente script:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.google.com');
  console.log('Page title:', await page.title());
  await browser.close();
})();

Ejecute el script con:

node test.js

Si el script se ejecuta correctamente y muestra el título de la página, su instalación funciona correctamente.

Consejos de resolución de problemas

  • Usuarios de Linux: Utilice su gestor de paquetes para asegurarse de que todas las dependencias necesarias estén instaladas.
  • Usuarios de Windows: Verifique que los permisos del sandbox de Chrome estén configurados correctamente.
  • Si Chrome no se encuentra en su ubicación predeterminada, establezca la variable de entorno PUPPETEER_CACHE_DIR para que apunte al directorio de instalación correcto.

"Ejecutar sin un sandbox está totalmente desaconsejado. Considere configurar un sandbox en su lugar." [2]

Para una mayor estabilidad y un mantenimiento más sencillo, puede crear un archivo .puppeteerrc.cjs para configurar el comportamiento de Puppeteer en lugar de pasar argumentos directamente al método launch.

Solución de problemas de Chromium

Los problemas de Chromium suelen deberse a bibliotecas faltantes o configuraciones incorrectas.

Uso de Chromium local

Si prefiere utilizar una instalación existente de Chromium en lugar de descargar una nueva, Puppeteer puede configurarse para funcionar con su navegador local. Este método resulta útil si necesita una versión específica de Chromium o gestiona manualmente las instalaciones de navegadores.

Para vincular Puppeteer con su Chromium local, ajuste su configuración de inicio de esta forma:

const browser = await puppeteer.launch({ executablePath: '/usr/bin/chromium-browser' });

Asegúrese de que todas las bibliotecas necesarias estén instaladas. En Linux, puede identificar las bibliotecas faltantes con:

ldd chrome | grep not

Si utilizar una instalación local no es una opción, considere instalar Chromium por separado mediante los pasos que se indican a continuación.

Instalación independiente de Chromium

A partir de Puppeteer v20.0.0, se descarga Chrome for Testing en lugar de Chromium.

Resumen de compatibilidad:

Versión de PuppeteerVersión del navegadorTamaño de descarga
v24.4.0Chrome for Testing 134.0.6998.35~170MB (macOS)
v24.3.1Chrome for Testing 133.0.6943.141~282MB (Linux)
v24.3.0Chrome for Testing 133.0.6943.126~280MB (Windows)

Si encuentra un error "Failed to launch chrome", pruebe estas soluciones:

  1. Compruebe las dependencias: Instale las bibliotecas faltantes en sistemas basados en Debian:

    sudo apt-get install -y libasound2 libatk1.0-0 libgbm-dev
    
  2. Ajuste la configuración de memoria: Para entornos Docker, aumente el tamaño de /dev/shm o use el indicador --disable-dev-shm-usage:

    const browser = await puppeteer.launch({
      args: ['--disable-dev-shm-usage']
    });
    
  3. Establezca tiempos de espera de navegación: Evite bloqueos configurando un tiempo de espera de navegación personalizado, como 60 segundos:

    await page.setDefaultNavigationTimeout(60000); // 60 seconds
    

"Headless chrome(-ium) necesita muchas dependencias para funcionar, y puppeteer no las instala todas." - savebreach.com

Para entornos como GitLab CI o casos en los que el sandbox está deshabilitado (no recomendado), incluya argumentos de inicio específicos:

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

Para omitir las advertencias relacionadas con HTTPS en versiones recientes de Chrome, desactive la función HttpsFirstBalancedModeAutoEnable:

const browser = await puppeteer.launch({
  args: ['--disable-features=HttpsFirstBalancedModeAutoEnable']
});

Gestión de dependencias

Gestionar las dependencias de forma eficaz es crucial para evitar fallos de inicio y comportamientos impredecibles. Esta sección explica cómo resolver conflictos de versiones y mantener los paquetes actualizados para prevenir errores de ejecución.

Solución de conflictos de paquetes

Los conflictos de paquetes suelen provocar errores como "Cannot find module 'puppeteer-core/internal/...'" o problemas al iniciar Chrome. Así puede solucionar estos problemas:

// Example: Resolving version conflicts using package.json overrides
{
  "overrides": {
    "ws": "^8.17.1",
    "debug": "^4.3.4"
  }
}

Pasos para solucionar problemas:

  • Compruebe la versión de Node.js: Asegúrese de utilizar Node.js 18 o superior. Las versiones anteriores pueden provocar problemas de compatibilidad.
  • Verifique las bibliotecas del sistema: En Linux, asegúrese de que todas las bibliotecas del sistema necesarias estén instaladas. Consulte la lista de dependencias en la sección Requisitos del sistema.
  • Revise las políticas de Chrome: Las políticas de Chrome pueden entrar en conflicto con el indicador predeterminado --disable-extensions de Puppeteer. Intente iniciar sin él:
const browser = await puppeteer.launch({
  ignoreDefaultArgs: ['--disable-extensions']
});

Una vez resueltos los conflictos, actualice sus paquetes para garantizar una estabilidad continua.

Mantenga los paquetes actualizados

Actualizar las dependencias periódicamente reduce los riesgos de seguridad y garantiza la compatibilidad. Así puede gestionar este proceso:

  • Seguimiento de dependencias

Utilice una tabla sencilla para supervisar las versiones de los paquetes, las fechas de actualización y su importancia:

PaqueteVersión actualÚltima actualizaciónRequerido por
puppeteer24.4.0Mar 2024Funcionalidad principal
ws8.17.1Feb 2024Compatibilidad con WebSocket
debug4.3.4Ene 2024Sistema de registros
  • Gestión de versiones

Cuando actualice, utilice los rangos de versionado semántico con cuidado. Para dependencias críticas, fije versiones exactas para evitar cambios inesperados:

{
  "dependencies": {
    "puppeteer": "24.4.0",
    "puppeteer-core": "24.4.0"
  }
}
  • Resolución de problemas de actualización

Genere un informe detallado de dependencias con:

npm list --all > dependency-report.txt

Este informe ayuda a identificar conflictos y dependencias anidadas problemáticas.

Para entornos como Docker o GitLab CI, asegúrese de que su configuración incluya los paquetes de sistema necesarios:

RUN apt-get update && apt-get install -y \
    chromium \
    libnss3 \
    libgconf-2-4 \
    libxss1

Configuraciones adicionales

Ajuste Puppeteer para configuraciones avanzadas con estas opciones adicionales.

Variables de entorno

Las variables de entorno le permiten ajustar el comportamiento de Puppeteer y sobrescribir la configuración predeterminada.

Estas son algunas variables clave:

VariablePropósitoValor de ejemplo
PUPPETEER_CACHE_DIREspecifica un directorio de caché personalizado para las descargas del navegador/usr/local/cache/puppeteer
PUPPETEER_EXECUTABLE_PATHApunta a un ejecutable de navegador específico/usr/bin/chromium
HTTP_PROXYConfigura los ajustes del proxy HTTPhttp://proxy.company.com:8080
HTTPS_PROXYConfigura los ajustes del proxy HTTPShttps://proxy.company.com:8443
NO_PROXYEnumera los dominios excluidos del uso de proxylocalhost,127.0.0.1

Para instalaciones personalizadas de Chromium, defina la ruta al ejecutable de esta forma:

const browser = await puppeteer.launch({
  executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || puppeteer.executablePath()
});

Una vez configuradas las variables de entorno, puede configurar proxies para gestionar eficazmente las restricciones de red.

Configuración del proxy

Para utilizar un servidor proxy con Puppeteer, aplique la siguiente configuración:

// Launch Puppeteer with a proxy server and authentication
const browser = await puppeteer.launch({
  args: ['--proxy-server=http://157.230.255.230:8118']
});

await page.authenticate({
  username: 'proxyUser',
  password: 'proxyPass'
});

// Optimize navigation with specific settings
await page.goto('https://example.com', {
  waitUntil: 'networkidle2',
  timeout: 30000
});

Incluya gestión de errores para garantizar un rendimiento sólido en producción:

try {
  await page.goto(url);
} catch (error) {
  console.error('Proxy connection failed:', error.message);
  // Add fallback logic or retry mechanism
}

Para configuraciones corporativas, exporte los ajustes del proxy en su terminal:

export HTTP_PROXY="http://proxy.company.com:8080"
export HTTPS_PROXY="https://proxy.company.com:8443"
export NO_PROXY="localhost,127.0.0.1,.company.internal"

También puede validar las conexiones de proxy mediante programación:

const validateProxy = async (page) => {
  try {
    await page.goto('https://api.ipify.org?format=json');
    const content = await page.content();
    return content.includes('ip');
  } catch {
    return false;
  }
};

Esto garantiza que su configuración de proxy funcione correctamente antes de continuar.

Próximos pasos

Lista de verificación de configuración

Antes de comenzar con la automatización mediante Puppeteer, asegúrese de que su entorno esté configurado correctamente. Utilice el siguiente script para validar su configuración:

// Validation script for environment setup
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.validateEnvironment();  // Custom validation
await browser.close();
Componente de configuraciónPaso de verificaciónProblema habitual
Node.jsCompruebe la compatibilidad de versionesVersión de Node.js desactualizada
Package.jsonVerifique la entrada "type": "module"Errores de importación ES6
Instalación de ChromePruebe el inicio del navegadorBinario de Chromium faltante
Configuración de memoriaCompruebe el tamaño de /dev/shm en DockerEl navegador falla al iniciarse
Gestión de recursosImplemente browser.close()Fugas de memoria

Una vez verificada su configuración, podrá centrarse en mejorar sus flujos para obtener mejores resultados de automatización.

Consejos para empezar

El sistema PDF de Carriyo procesó eficientemente 10.000 etiquetas de envío al día y alcanzó una latencia p95 de 365 ms [4]. Para lograr niveles de rendimiento similares, considere estas estrategias:

  • Gestión de recursos: Desactive las funciones innecesarias para ahorrar recursos. Por ejemplo, inicie Puppeteer con una configuración optimizada:

    const browser = await puppeteer.launch({
      headless: true,
      args: ['--disable-dev-shm-usage'],
      defaultViewport: { width: 1920, height: 1080 }
    });
    
  • Gestión de errores: Utilice métodos sólidos de recuperación ante errores, como bloques try-catch y controladores de errores personalizados adaptados a problemas específicos.

  • Optimización del rendimiento: Aumente la velocidad mediante:

    • Almacenamiento en caché de datos utilizados con frecuencia
    • Intercepción de solicitudes de red
    • Ejecución de tareas en paralelo
    • Uso de Chrome DevTools para supervisar el rendimiento

Para una automatización más avanzada, explore la plataforma de flujos low-code de Latenode. Ofrece precios basados en ejecuciones y una variedad de funciones para simplificar implementaciones complejas de Puppeteer [3].

References

FAQ

Frequently Asked Questions

Las versiones actuales de Puppeteer requieren Node.js 18 o posterior. Compruebe su versión con node --version y actualice a la versión LTS más reciente antes de instalar Puppeteer.

¿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