Volver al Blog
Red

Cambio dinámico de proxy y configuración por contexto

Aprende a configurar el cambio de proxy en tiempo de ejecución y proxies por contexto en BotBrowser para gestionar múltiples identidades de red simultáneamente.

Introducción

Muchos flujos de trabajo de privacidad requieren más de un proxy por sesión de navegador: diferentes proxies para distintas cuentas, regiones o dominios objetivo. La configuración estática (un proxy para toda la vida del navegador) es limitante.

BotBrowser soporta cambio dinámico de proxy mediante las APIs de contexto de Playwright y Puppeteer. Cada contexto puede enrutar tráfico a través de un proxy distinto con su propia identidad geográfica; puedes crear y cerrar contextos en tiempo de ejecución sin reiniciar el navegador. Este artículo cubre la configuración por contexto, estrategias de rotación y setups multi-proxy.

Impacto en la privacidad

Si varias identidades comparten el mismo proxy, su tráfico queda ligado por IP. Un sistema de tracking que observe la misma IP accediendo a múltiples cuentas en momentos similares puede correlacionarlas. Aunque los perfiles de huella digital difieran, la identidad de red compartida crea una conexión.

Asignar proxies por contexto resuelve esto: cada contexto usa un proxy distinto, por lo que el tráfico de distintas identidades no comparte IP. Combinado con el aislamiento de huella por contexto de BotBrowser, cada contexto presenta una identidad independiente: distinto fingerprint, distinta IP y metadatos geográficos.

Antecedentes técnicos

Contextos de navegador y aislamiento de red

Un contexto en Playwright/Puppeteer es una sesión de navegación aislada dentro de un mismo proceso de navegador. Cada contexto tiene sus propias cookies, localStorage, sessionStorage y caché. Playwright permite además configurar proxies por contexto.

Crear un contexto con browser.newContext({ proxy: ... }) enruta todo el tráfico de ese contexto a través del proxy especificado, sin afectar otros contextos.

Estática vs. proxies por contexto

La configuración estática usa --proxy-server al lanzar el navegador (aplica a todos los contextos). Ejemplo:

chrome --bot-profile="/path/to/profile.enc" \
       --proxy-server=socks5://user:pass@proxy:1080

La configuración por contexto se establece al crear contextos:

const context = await browser.newContext({
  proxy: { server: 'socks5://proxy:1080', username: 'user', password: 'pass' },
});

Si un contexto no especifica proxy, hereda el proxy a nivel de navegador.

Extensiones de BotBrowser

BotBrowser añade derivación automática de configuración geográfica: al establecer un proxy por contexto, BotBrowser infiere automáticamente la zona horaria, locale y lenguaje desde la IP del proxy, proporcionando identidad geográfica completa sin configuración manual.

Enfoques comunes y limitaciones

Instancias separadas del navegador

Iniciar una instancia por proxy funciona pero consume más memoria y CPU.

Rotación a nivel de framework

Usar page.route() o interceptores modifica el tráfico en JS/CDP y puede no cubrir conexiones iniciadas antes del interceptor, WebSocket o DNS prefetch.

Middleware proxy local

Un middleware de rotación añade complejidad y latencia y crea un punto único de mantenimiento.

Enfoque de BotBrowser

Proxies por contexto con detección automática

const usContext = await browser.newContext({
  proxy: { server: 'socks5://us-proxy:1080', username: 'user', password: 'pass' },
});

const deContext = await browser.newContext({
  proxy: { server: 'socks5://de-proxy:1080', username: 'user', password: 'pass' },
});

Cada contexto recibe automáticamente timezone, locale y language acorde a su proxy.

Overrides manuales

Si necesitas control total, crea el contexto especificando locale y timezone junto al proxy.

Rotación entre requests

Para diversidad de IP entre navegaciones, crea y cierra contextos por rotación, garantizando estado limpio.

Asignación persistente por sesión

Mantén el contexto abierto para cuentas que requieran proxy persistente.

Configuración y uso

Default CLI + override por contexto

Define un proxy por defecto en CLI y sobreescribe en contextos especiales.

Flags BotBrowser combinadas

Usa --bot-local-dns y --bot-webrtc-ice junto a proxies por contexto para evitar fugas.

Puppeteer

Puppeteer tiene soporte limitado para proxies por contexto; habitualmente se usan instancias separadas.

Verificación

Verifica IP, timezone y locale desde cada contexto (ej. https://httpbin.org/ip y Intl.DateTimeFormat().resolvedOptions().timeZone).

Buenas prácticas

  1. Cerrar contextos cuando terminen.
  2. Preferir Playwright para proxies por contexto.
  3. Alinear geografía del proxy con locale/timezone.
  4. Usar --bot-local-dns y --bot-webrtc-ice globalmente.
  5. Usar perfiles distintos por cuenta.
  6. No usar page.authenticate(); pasar credenciales en la URL del proxy.

FAQ y resumen

Proxy por contexto no es modificable tras la creación; el número de contextos depende de la RAM; BotBrowser detecta automáticamente la geografía (ENT Tier1). Dynamic proxy switching permite identidades múltiples dentro de un único proceso de navegador.

title: "Cambio dinamico de proxy y configuracion de proxy por contexto" description: "Aprende a configurar el cambio de proxy en tiempo de ejecucion y configuraciones de proxy por contexto en BotBrowser para gestionar multiples identidades de red." date: "2025-09-16" locale: es category: network tags: ["proxy", "dynamic", "switching", "per-context", "network"] published: true

Por que importa el cambio dinamico de proxy

Muchos flujos de trabajo requieren mas de un solo proxy para toda una sesion de navegador. BotBrowser soporta cambio de proxy en tiempo de ejecucion y asignacion de proxy por contexto a traves de la API de contexto de Playwright.

Configuracion estatica vs. dinamica

El enfoque mas simple establece un proxy al inicio con --proxy-server:

chrome --bot-profile="/profiles/windows-chrome-122.enc" \
       --proxy-server=socks5://user:pass@proxy-host:1080 \
       --user-data-dir="$(mktemp -d)"

Para flujos de trabajo multi-identidad, los proxies por contexto son mas flexibles:

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

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

const usContext = await browser.newContext({
  proxy: { server: 'socks5://us-proxy:1080', username: 'user', password: 'pass' },
});

const deContext = await browser.newContext({
  proxy: { server: 'socks5://de-proxy:1080', username: 'user', password: 'pass' },
});

Identidad geografica por contexto

Combina el cambio de proxy con configuraciones de locale por contexto:

async function createGeoContext(browser, config) {
  return browser.newContext({
    proxy: { server: config.proxyUrl, username: config.user, password: config.pass },
    locale: config.locale,
    timezoneId: config.timezone,
  });
}

const usCtx = await createGeoContext(browser, {
  proxyUrl: 'socks5://us-east:1080', user: 'u', pass: 'p',
  locale: 'en-US', timezone: 'America/New_York',
});

const jpCtx = await createGeoContext(browser, {
  proxyUrl: 'socks5://jp-tokyo:1080', user: 'u', pass: 'p',
  locale: 'ja-JP', timezone: 'Asia/Tokyo',
});

Rotacion de proxy entre solicitudes

const proxyPool = [
  'socks5://user:pass@proxy-1:1080',
  'socks5://user:pass@proxy-2:1080',
  'socks5://user:pass@proxy-3:1080',
];

async function navigateWithRotation(browser, url, index) {
  const context = await browser.newContext({
    proxy: { server: proxyPool[index % proxyPool.length] },
  });
  const page = await context.newPage();
  await page.goto(url);
  const content = await page.content();
  await context.close();
  return content;
}

Combinacion con flags CLI de BotBrowser

const browser = await chromium.launch({
  executablePath: '/path/to/botbrowser/chrome',
  args: [
    '--bot-profile=/profiles/windows-chrome-122.enc',
    '--bot-config-timezone=America/New_York',
    '--bot-config-locale=en-US',
    '--bot-config-languages=en-US,en',
  ],
  headless: true,
});

Puntos clave

  • La configuracion de proxy estatica se aplica a todo el trafico al inicio
  • Los proxies por contexto permiten diferentes identidades de red dentro de una sola instancia
  • Combina configuraciones de proxy con locale y zona horaria para identidad geografica completa
  • BotBrowser soporta protocolos SOCKS5, HTTP y HTTPS con credenciales embebidas

Primeros pasos

  1. Descarga BotBrowser desde GitHub
  2. Configura un proveedor de proxy o tu propia infraestructura
  3. Usa browser.newContext({ proxy: ... }) de Playwright para enrutamiento por contexto
  4. Combina con --bot-config-timezone y --bot-config-locale para consistencia geografica
#proxy#dynamic#switching#per-context#network