Puppeteer para JavaScript (Node.js): guía completa con ejemplos
1. ¿Qué es y para qué sirve?
Puppeteer es una librería para Node.js que proporciona una API de alto nivel para controlar el navegador Chrome (o Chromium) a través del protocolo DevTools Protocol. Por defecto, Puppeteer funciona en modo headless (sin interfaz gráfica), lo que la convierte en la herramienta ideal para automatizar tareas web en el lado del servidor. Sin embargo, si es necesario, también se puede ejecutar un navegador completo con interfaz para depuración.
Los casos de uso principales de Puppeteer incluyen: web scraping (extraer datos de sitios dinámicos que usan JavaScript), pruebas automatizadas de aplicaciones web (tests e2e), generación de capturas de pantalla y PDF de páginas, emulación de acciones del usuario (clics, llenado de formularios, navegación), así como monitoreo de rendimiento de páginas web. A diferencia de las simples peticiones HTTP, Puppeteer ejecuta JavaScript en la página, lo que permite obtener contenido generado dinámicamente.
La librería cuenta con el respaldo activo del equipo de Google y es utilizada en producción por miles de empresas. Puppeteer ofrece control total sobre el navegador: desde la gestión de pestañas y la interceptación de solicitudes de red hasta la emulación de dispositivos móviles y geolocalización. Es una herramienta versátil que reemplaza a todo un conjunto de utilidades para trabajar con contenido web.
2. Instalación
Para instalar Puppeteer a través de npm (Node Package Manager), ejecuta el siguiente comando en la terminal, en la raíz de tu proyecto:
npm install puppeteer
Este comando descargará la librería y automáticamente descargará una versión compatible de Chromium (aproximadamente 300-400 MB). Si prefieres usar tu propia instalación de Chrome/Chromium, instala puppeteer-core:
npm install puppeteer-core
Al usar puppeteer-core, deberás especificar la ruta al ejecutable del navegador al iniciarlo. Para trabajar con la librería se requiere Node.js versión 18.0.0 o superior (se recomienda la versión LTS).
3. Inicio rápido — ejemplo mínimo funcional
Crea un archivo llamado ejemplo.js y añade el siguiente código, que toma una captura de pantalla de una página web:
const puppeteer = require('puppeteer');
(async () => {
// Iniciamos el navegador
const browser = await puppeteer.launch();
// Abrimos una nueva página
const page = await browser.newPage();
// Navegamos al sitio web
await page.goto('https://example.com');
// Tomamos una captura de pantalla
await page.screenshot({ path: 'ejemplo.png' });
// Cerramos el navegador
await browser.close();
})();
Ejecuta el script con el comando node ejemplo.js. En la carpeta aparecerá un archivo ejemplo.png con la captura de pantalla de example.com. Este es un ejemplo mínimo pero completamente funcional de automatización del navegador.
4. Métodos, funciones y clases principales
A continuación se presentan 8 métodos y clases clave de Puppeteer con su descripción y ejemplos de código.
4.1. puppeteer.launch()
Firma: puppeteer.launch([options]) → Promise<Browser>
Qué hace: Inicia una instancia del navegador Chromium/Chrome. Acepta un objeto de opciones (headless, slowMo, args, etc.). Devuelve un objeto Browser.
const browser = await puppeteer.launch({
headless: false, // Mostrar el navegador
slowMo: 100, // Ralentizar las acciones (ms)
args: ['--window-size=1920,1080']
});