Volver al Blog
Despliegue

Mejores practicas para capturas de pantalla con BotBrowser en modo headless

Captura capturas de pantalla consistentes y de alta calidad con BotBrowser en modo headless para despliegues de produccion.

Descripcion general

Las capturas de pantalla en entornos headless requieren atencion al tamano del viewport, tiempo de carga de pagina y configuracion de display. Los perfiles de BotBrowser incluyen resolucion de pantalla y ratio de pixeles del dispositivo, usa defaultViewport: null para preservar estos valores.

Configuracion del viewport

const browser = await puppeteer.launch({
  executablePath: '/path/to/botbrowser/chrome',
  args: [
    '--bot-profile=/path/to/profile.enc',
    '--window-size=1920,1080',
  ],
  headless: true,
  defaultViewport: null,
});

Tiempo de carga de pagina

El problema mas comun es capturar una pagina parcialmente cargada. Usa estrategias de espera adecuadas:

await page.goto('https://example.com', {
  waitUntil: 'networkidle0',
  timeout: 30000,
});
await page.waitForSelector('.main-content', { visible: true });
await page.evaluate(() => document.fonts.ready);
await page.screenshot({ path: 'output.png', fullPage: true });

Formatos de captura

Usa PNG para precision pixel a pixel. Usa JPEG con quality: 85 para lotes grandes. Para elementos especificos:

const element = await page.$('.target-element');
await element.screenshot({ path: 'element.png' });

Xvfb en Linux

Ajusta el display virtual a la resolucion de tu perfil. Usa profundidad de color de 24 bits:

Xvfb :10 -screen 0 1920x1080x24 &
export DISPLAY=:10.0

Ejemplo de produccion

const puppeteer = require('puppeteer-core');

async function captureScreenshot(url, outputPath) {
  const browser = await puppeteer.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/opt/profiles/profile.enc',
      '--window-size=1920,1080',
    ],
    headless: true,
    defaultViewport: null,
  });

  try {
    const page = await browser.newPage();
    await page.goto(url, { waitUntil: 'networkidle0', timeout: 30000 });
    await page.evaluate(() => document.fonts.ready);
    await page.screenshot({ path: outputPath, type: 'png' });
  } finally {
    await browser.close();
  }
}

Problemas comunes

Capturas en blanco: Pagina no terminada de cargar. Usa waitUntil: 'networkidle0' y agrega esperas explicitas.

Tamano de viewport incorrecto: Establece defaultViewport: null.

Fuentes faltantes: Instala fuentes base del sistema en tu servidor.

Baja resolucion: Profundidad de color de Xvfb demasiado baja. Usa 24 bits.

#screenshot#headless#deployment#best-practices#production