Puppeteer es una herramienta poderosa y versátil que permite la automatización de tareas en el navegador utilizando Node.js. Una de las funcionalidades más útiles de Puppeteer es la capacidad de capturar imágenes de páginas web (screenshots). Este artículo te guiará a través del proceso de cómo hacer una captura de pantalla de una web con Puppeteer, desde la instalación hasta la captura de imágenes personalizadas.
Puppeteer es una biblioteca de Node.js que proporciona una API de alto nivel para controlar navegadores como Chrome o Chromium de manera programática. Es ampliamente utilizada para realizar tareas como:
Puppeteer es especialmente útil para desarrolladores y testers que necesitan automatizar procesos que normalmente requerirían interacción manual con un navegador.
Antes de empezar a usar Puppeteer, es necesario instalar Node.js y Puppeteer en tu entorno de desarrollo. A continuación se detalla el proceso de instalación.
Para usar Puppeteer, primero necesitas instalar Node.js, ya que Puppeteer es una biblioteca basada en Node. Puedes descargar Node.js desde su sitio web oficial.
Abre tu terminal y crea un nuevo directorio para tu proyecto:
mkdir puppeteer-project
cd puppeteer-project
Luego, inicializa un proyecto de Node.js:
npm init -y
Con el proyecto inicializado, instala Puppeteer usando npm:
npm install puppeteer
Este comando descargará e instalará Puppeteer y todas sus dependencias, incluyendo una versión compatible de Chromium que Puppeteer controlará.
Una vez que tienes Puppeteer instalado, es hora de aprender a capturar una web. Aquí te mostramos cómo hacerlo con un script básico.
Dentro de tu proyecto, crea un archivo llamado screenshot.js
:
const puppeteer = require('puppeteer');
(async () => {
// Lanza una nueva instancia de navegador
const browser = await puppeteer.launch();
// Abre una nueva página
const page = await browser.newPage();
// Navega a la URL deseada
await page.goto('https://www.example.com');
// Captura de pantalla y la guarda como screenshot.png
await page.screenshot({ path: 'screenshot.png' });
// Cierra el navegador
await browser.close();
})();
Para ejecutar el script y capturar la pantalla, simplemente corre el siguiente comando en tu terminal:
node screenshot.js
Este script básico hará una captura de pantalla de la página https://www.example.com
y la guardará como screenshot.png
en el directorio de tu proyecto.
Puppeteer permite personalizar la captura de pantalla de muchas maneras. A continuación, exploramos algunas de las opciones más útiles.
Puedes capturar la página completa en lugar de solo el área visible:
await page.screenshot({ path: 'fullpage.png', fullPage: true });
Si solo necesitas capturar una parte de la página, Puppeteer permite especificar el área con coordenadas:
await page.screenshot({
path: 'area.png',
clip: { x: 0, y: 0, width: 800, height: 600 }
});
Puppeteer permite guardar la captura en diferentes formatos como PNG o JPEG. Para cambiar el formato a JPEG, puedes especificar la opción type
:
await page.screenshot({ path: 'screenshot.jpg', type: 'jpeg' });
También puedes controlar la calidad de la imagen en formato JPEG:
await page.screenshot({ path: 'screenshot.jpg', type: 'jpeg', quality: 80 });
Puppeteer permite simular diferentes dispositivos para capturar cómo se vería la página en un móvil o tableta. Por ejemplo, para capturar una página como si estuvieras en un iPhone X:
const iPhone = puppeteer.devices['iPhone X'];
await page.emulate(iPhone);
await page.screenshot({ path: 'iphone.png' });
En algunos casos, es posible que necesites capturar la pantalla después de esperar un tiempo específico, para permitir que la página se cargue completamente:
await page.waitForTimeout(5000); // Espera 5 segundos
await page.screenshot({ path: 'delayed.png' });
Puppeteer puede integrarse en scripts que tomen capturas de pantallas periódicas de una página para monitorear cambios:
const cron = require('node-cron');
cron.schedule('0 * * * *', async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.example.com');
await page.screenshot({ path: `screenshot-${Date.now()}.png` });
await browser.close();
});
Puppeteer puede automatizar la captura de varias páginas de manera secuencial:
const urls = ['https://www.example.com', 'https://www.example2.com', 'https://www.example3.com'];
for (const url of urls) {
await page.goto(url);
await page.screenshot({ path: `${url.split('//')[1]}.png` });
}
Puppeteer es una herramienta increíblemente flexible que facilita la captura de pantallas web de manera programática. Con esta guía, has aprendido a realizar capturas básicas, así como a aplicar opciones avanzadas para personalizar las capturas según tus necesidades. Ya sea para monitoreo, pruebas o generación de contenido visual, Puppeteer es la opción ideal para automatizar la interacción con navegadores. ¡Empieza a experimentar con Puppeteer y descubre todo lo que puedes hacer con él!
Jorge García
Fullstack developer