Primeros pasos

Automatizacion de navegador con Playwright y perfiles de huella digital

Guia completa para integrar Playwright con perfiles de navegador consistentes con huella digital, soporte de proxy y automatizacion multi-contexto.

Documentación

Prefieres la documentación del producto mantenida?

Este artículo tiene una página equivalente en el centro de documentación. Usa los docs para el flujo canónico, las flags actuales y la referencia duradera.

Introduccion

Playwright es el framework de automatizacion de navegador de codigo abierto de Microsoft, conocido por su espera automatica confiable, soporte multi-navegador y potente API para controlar el comportamiento del navegador. BotBrowser reemplaza el binario estandar de Chromium con uno que produce una salida de huella digital consistente controlada por archivos de perfil. Juntos, Playwright maneja la logica de automatizacion mientras BotBrowser maneja la capa de identidad del navegador.

Esta guia cubre todo lo que necesitas para comenzar: instalacion, configuracion basica de lanzamiento, configuracion de proxy, multiples contextos de navegador, gestion de viewport, errores comunes y patrones de despliegue en produccion. Al final, tendras una configuracion funcional que combina las capacidades de automatizacion de Playwright con el control de huella digital de BotBrowser.

Impacto en la privacidad: por que Playwright + BotBrowser

Playwright estandar usa un binario de Chromium basico que expone la huella digital real del sistema. Cada instancia de navegador revela las mismas caracteristicas de la maquina host: la misma GPU, las mismas fuentes, la misma resolucion de pantalla y senales especificas de automatizacion que indican que el navegador esta siendo controlado programaticamente.

BotBrowser cambia esta ecuacion. Cada instancia de navegador puede cargar un perfil de huella digital diferente, presentando una identidad de navegador unica que es consistente en todas las senales. El framework de automatizacion maneja la navegacion, la extraccion de datos y la logica de interaccion. La capa de identidad del navegador se encarga de que cada instancia parezca una sesion de navegador distinta y legitima.

Esta separacion de responsabilidades es limpia y practica. No necesitas modificar tu codigo de automatizacion de Playwright para trabajar con BotBrowser. La integracion ocurre a nivel de configuracion de lanzamiento, y todo lo demas (interacciones de pagina, selectores, aserciones, intercepcion de red) funciona exactamente igual que con Playwright estandar.

Contexto tecnico

Por que playwright-core y no playwright

El paquete npm estandar playwright incluye su propio binario de Chromium. Cuando instalas playwright, descarga y gestiona los binarios del navegador automaticamente. Esto es conveniente para uso general pero entra en conflicto con BotBrowser, que proporciona su propio binario de Chromium modificado.

El paquete playwright-core proporciona la misma API sin navegadores incluidos. Requiere que especifiques un executablePath al lanzar, que es exactamente lo que necesitas para apuntar Playwright al binario de BotBrowser.

# Instalar playwright-core, no playwright
npm install playwright-core

Como funciona la configuracion de lanzamiento

Cuando llamas a chromium.launch(), Playwright inicia un proceso de Chrome con los argumentos especificados. Los argumentos especificos de BotBrowser (--bot-profile, --bot-config-*, etc.) se pasan a traves del array args y son procesados por el binario de BotBrowser durante la inicializacion.

El proceso de lanzamiento:

  1. Playwright llama al ejecutable de BotBrowser con los argumentos proporcionados
  2. BotBrowser carga el perfil especificado y aplica todas las configuraciones de huella digital
  3. BotBrowser inicia el servidor Chrome DevTools Protocol (CDP)
  4. Playwright se conecta al servidor CDP y toma control de la automatizacion
  5. A partir de este punto, todas las operaciones de Playwright funcionan normalmente

Contextos de navegador en Playwright

El contexto de navegador de Playwright es una sesion de navegacion aislada con sus propias cookies, almacenamiento y cache. Cada contexto dentro de una instancia de navegador comparte el mismo perfil de huella digital (ya que el perfil se carga a nivel del navegador), pero tiene estado independiente.

Para diferentes identidades de huella digital, lanza instancias de navegador separadas, cada una con su propio perfil. Para multiples sesiones compartiendo la misma identidad, crea multiples contextos dentro de una sola instancia de navegador.

Enfoques comunes y sus limitaciones

Uso de los navegadores integrados de Playwright

El Chromium incluido de Playwright funciona para automatizacion general pero no tiene control de huella digital. Cada instancia tiene la misma huella digital (la de la maquina host), y estan presentes indicadores de automatizacion como navigator.webdriver.

Uso de compilaciones personalizadas de Chromium

Algunos equipos compilan Chromium personalizado con parches especificos. Esto requiere mantener un pipeline de compilacion, seguir las actualizaciones upstream de Chromium y gestionar la distribucion de binarios. BotBrowser maneja todo esto, proporcionando binarios listos para usar con control de huella digital integrado.

Sobreescrituras de huella digital a nivel de JavaScript

Inyectar JavaScript para sobreescribir propiedades del navigator, renderizado de Canvas y otras senales es un enfoque comun. Sin embargo, la inyeccion de JavaScript opera despues de la creacion de la pagina y puede ser detectada a traves de analisis de tiempo, inspeccion de la cadena de prototipos y otros metodos. BotBrowser aplica el control de huella digital a nivel del motor, antes de que cualquier JavaScript se ejecute.

Enfoque de BotBrowser

BotBrowser se integra con Playwright a traves del parametro estandar executablePath. No se necesitan plugins de Playwright, parches ni API especiales.

Integracion minima

La integracion mas simple requiere tres cosas:

  1. playwright-core instalado (no playwright)
  2. La ruta al binario de BotBrowser
  3. Un archivo de perfil de huella digital

Todo lo demas es codigo estandar de Playwright.

Control a nivel del motor

Debido a que BotBrowser modifica el motor de Chromium en si, todo el control de huella digital ocurre antes de que Playwright se conecte. Para cuando tu script de Playwright comienza a ejecutarse, el navegador ya tiene su identidad de huella digital completa. Esto significa:

  • Las senales de huella digital estan presentes desde la primera carga de pagina
  • No se necesita una fase de "configuracion" en tu codigo de automatizacion
  • Todas las funciones de Playwright (contextos, paginas, intercepcion de red) funcionan como estan documentadas

Configuracion y uso

Prerrequisitos

  • Binario de BotBrowser (descargar desde GitHub)
  • Un archivo de perfil de huella digital (formato .enc)
  • Node.js 18+
  • npm install playwright-core

Asegurate de que el binario de BotBrowser tenga permisos de ejecucion:

chmod +x /path/to/botbrowser/chrome

Lanzamiento basico

const { chromium } = require('playwright-core');

(async () => {
  const browser = await chromium.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
    ],
    headless: true,
  });

  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('https://example.com');

  // Tu logica de automatizacion aqui
  const title = await page.title();
  console.log('Titulo de la pagina:', title);

  await browser.close();
})();

Perfil + proxy + configuracion regional

const browser = await chromium.launch({
  executablePath: '/path/to/botbrowser/chrome',
  args: [
    '--bot-profile=/path/to/profile.enc',
    '--proxy-server=socks5://user:pass@proxy:1080',
    '--bot-config-timezone=America/New_York',
    '--bot-config-locale=en-US',
    '--bot-config-languages=en-US,en',
  ],
  headless: true,
});

Multiples contextos (misma identidad)

const browser = await chromium.launch({
  executablePath: '/path/to/botbrowser/chrome',
  args: [
    '--bot-profile=/path/to/profile.enc',
  ],
  headless: true,
});

// Dos sesiones aisladas compartiendo la misma huella digital
const context1 = await browser.newContext();
const context2 = await browser.newContext();

const page1 = await context1.newPage();
const page2 = await context2.newPage();

await page1.goto('https://example.com');
await page2.goto('https://example.org');

// Cada contexto tiene cookies y almacenamiento independientes
// Ambos comparten el mismo perfil de huella digital

Multiples identidades (navegadores separados)

async function createIdentity(profilePath, proxyUrl) {
  const args = [
    `--bot-profile=${profilePath}`,
  ];
  if (proxyUrl) args.push(`--proxy-server=${proxyUrl}`);

  return chromium.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args,
    headless: true,
  });
}

const identity1 = await createIdentity(
  '/profiles/win11-us.enc',
  'socks5://user:pass@us-proxy:1080'
);
const identity2 = await createIdentity(
  '/profiles/win11-de.enc',
  'socks5://user:pass@de-proxy:1080'
);

// Cada instancia de navegador tiene una huella digital unica

Intercepcion de red

const context = await browser.newContext();
const page = await context.newPage();

// Interceptar solicitudes - funciona igual que con Playwright estandar
await page.route('**/*.png', route => route.abort());
await page.route('**/api/**', route => {
  console.log('Solicitud API:', route.request().url());
  route.continue();
});

await page.goto('https://example.com');

Gestion de viewport

// Opcion 1: Dejar que el perfil controle el viewport (recomendado)
const browser = await chromium.launch({
  executablePath: '/path/to/botbrowser/chrome',
  args: [
    '--bot-profile=/path/to/profile.enc',
  ],
  headless: true,
});
const context = await browser.newContext(); // Sin sobreescritura de viewport

// Opcion 2: Viewport explicito (puede entrar en conflicto con perfiles moviles)
const context2 = await browser.newContext({
  viewport: { width: 1920, height: 1080 },
});

Capturas de pantalla y PDF

const page = await context.newPage();
await page.goto('https://example.com');

// Captura de pantalla - funciona normalmente
await page.screenshot({ path: 'screenshot.png', fullPage: true });

// Generacion de PDF
await page.pdf({ path: 'page.pdf', format: 'A4' });

Verificacion

Verifica que la integracion funciona comprobando las senales de huella digital:

const page = await context.newPage();
await page.goto('https://example.com');

const fingerprint = await page.evaluate(() => ({
  userAgent: navigator.userAgent,
  platform: navigator.platform,
  languages: navigator.languages,
  hardwareConcurrency: navigator.hardwareConcurrency,
  deviceMemory: navigator.deviceMemory,
  webdriver: navigator.webdriver,
  maxTouchPoints: navigator.maxTouchPoints,
  screenWidth: screen.width,
  screenHeight: screen.height,
  dpr: devicePixelRatio,
}));

console.log('Huella digital del navegador:', JSON.stringify(fingerprint, null, 2));
Arquitectura Playwright + BotBrowser Tu script Logica de automatizacion Playwright Protocolo CDP BotBrowser Capa de identidad El script controla el comportamiento. Playwright controla la automatizacion. BotBrowser controla la identidad. API estandar de Playwright, sin plugins ni parches necesarios

Mejores practicas

  • Usa playwright-core, no el paquete completo playwright. El paquete completo descarga su propio Chromium, que no necesitas.
  • Usa rutas absolutas para --bot-profile. Las rutas relativas pueden resolverse incorrectamente dependiendo del directorio de trabajo.
  • No establezcas viewport en los contextos del navegador a menos que necesites especificamente sobreescribir el viewport del perfil. Deja que el perfil controle las dimensiones de pantalla.
  • Establece DISPLAY=:10.0 al ejecutar en servidores Linux, incluso en modo headless.
  • Usa instancias de navegador separadas para identidades separadas. Los contextos de navegador comparten la misma huella digital. Para diferentes identidades, lanza diferentes navegadores.
  • Cierra los navegadores cuando termines. Cada instancia de navegador es un proceso de Chrome. Las instancias sin cerrar consumen memoria y CPU.
  • Maneja los errores de lanzamiento. Verifica que la ruta del binario sea correcta y que el binario tenga permisos de ejecucion si el lanzamiento falla.

Preguntas frecuentes

¿Puedo usar el paquete completo playwright en lugar de playwright-core?

Tecnicamente si, pero descargara un binario de Chromium innecesario. Usa playwright-core para evitar la descarga extra y dejar claro que estas usando un binario de navegador personalizado.

¿Necesito desactivar navigator.webdriver?

BotBrowser maneja el control de senales de automatizacion a traves del perfil. No necesitas agregar JavaScript para modificar navigator.webdriver ni otros indicadores de automatizacion.

¿Puedo usar codegen o el inspector de Playwright con BotBrowser?

Si. La herramienta codegen de Playwright funciona con BotBrowser cuando especificas la ruta del ejecutable. Ejecuta npx playwright codegen --browser-channel=chromium y configura el ejecutable personalizado en tu configuracion de Playwright.

¿Como ejecuto BotBrowser con Playwright en Ubuntu?

Establece la variable de entorno DISPLAY e instala las bibliotecas requeridas:

export DISPLAY=:10.0
# Instalar dependencias si es necesario
apt-get install -y libnss3 libatk-bridge2.0-0 libdrm2 libxrandr2 libgbm1

¿Puedo usar el proxy por contexto de Playwright con BotBrowser?

BotBrowser soporta proxy por contexto a traves de su propio mecanismo. Usar --proxy-server establece el proxy a nivel de navegador. Para proxy por contexto, usa la funcion de huella digital por contexto de BotBrowser (ENT Tier1), que auto-deriva informacion geografica. Evita usar page.authenticate() de Playwright para autenticacion de proxy, ya que puede interferir con la geolocalizacion automatica de BotBrowser.

¿Cuantas instancias de navegador concurrentes puedo ejecutar?

Esto depende de los recursos de tu sistema. Cada instancia de BotBrowser es un proceso de Chrome que tipicamente usa 200-500 MB de RAM. Un servidor con 32 GB de RAM puede ejecutar comodamente 30-60 instancias concurrentes, dependiendo de la complejidad de la pagina.

¿El rastreo y depuracion de Playwright funcionan con BotBrowser?

Si. El visor de trazas de Playwright (context.tracing.start()), las capturas de pantalla y la grabacion de video funcionan normalmente con BotBrowser.

¿Puedo usar TypeScript con playwright-core?

Si. playwright-core incluye definiciones de tipos TypeScript. Usalo de la misma manera que Playwright estandar con TypeScript:

import { chromium, Browser, Page } from 'playwright-core';

Resumen

Integrar BotBrowser con Playwright requiere cambios minimos al codigo estandar de Playwright: instala playwright-core, apunta executablePath al binario de BotBrowser y agrega --bot-profile a los argumentos de lanzamiento. Todo lo demas (interacciones de pagina, intercepcion de red, capturas de pantalla, aserciones) funciona exactamente como esta documentado en la API de Playwright.

Para temas relacionados, consulta Primeros pasos con Puppeteer para el equivalente con Puppeteer, Recetas CLI para mas combinaciones de banderas, y Gestion de perfiles para organizar perfiles.

#Playwright#Automation#primeros pasos#Tutorial

Lleva BotBrowser de la investigación a producción

Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.