Files
navegator/docs/STEALTH_FLAGS.md
Developer 3253828fef
Tests / Lint (push) Has been cancelled
Tests / Unit Tests (push) Has been cancelled
Tests / E2E Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Initial commit: navegator - Chrome CDP automation for LLMs
Add complete navegator system for stealthy browser automation:
- CDP client with WebSocket communication
- Browser API with navigation, storage, network, runtime
- Stealth flags and anti-detection scripts
- Persistent profile support
- Examples and comprehensive documentation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-24 23:33:07 +01:00

8.7 KiB

Chrome Stealth Flags - Documentación Completa

Esta documentación lista todas las flags necesarias para ejecutar Chrome/Chromium con la menor detección posible de automatización.

Flags Críticas (Siempre Activadas)

1. Desactivar Detección de Automatización

"--disable-blink-features=AutomationControlled"

Propósito: Elimina navigator.webdriver = true que es el indicador más obvio de automatización. Impacto: CRÍTICO - Sin esto, casi cualquier sitio detectará la automatización.

"--exclude-switches=enable-automation"

Propósito: Evita que Chrome agregue el flag --enable-automation automáticamente. Impacto: ALTO - Complementa la desactivación de AutomationControlled.

2. Gestión de Perfiles y User Data

"--user-data-dir=/path/to/profile"

Propósito: Especifica dónde Chrome almacena cookies, historial, extensiones, etc. Impacto: CRÍTICO - Permite persistencia de sesión y reutilización de perfiles. Nota: Debe ser ruta absoluta única por instancia.

"--profile-directory=Default"

Propósito: Nombre del perfil dentro de user-data-dir. Impacto: MEDIO - Permite múltiples perfiles en el mismo user-data-dir.

3. Modo Sin Interfaz Gráfica

"--headless=new"

Propósito: Ejecuta Chrome sin ventana visible (nuevo modo headless estable). Impacto: ALTO - Mejor rendimiento, pero puede ser detectado. Alternativa: Omitir para modo con interfaz visible (más sigiloso pero usa más recursos).

"--disable-gpu"

Propósito: Desactiva aceleración por GPU (necesario en algunos entornos headless). Impacto: MEDIO - Evita crashes en servidores sin GPU.

4. Configuración de Ventana

"--window-size=1920,1080"

Propósito: Define tamaño de viewport. Impacto: MEDIO - Sitios pueden detectar tamaños anormales. Recomendación: Usar resoluciones comunes (1920x1080, 1366x768, 1440x900).

"--start-maximized"

Propósito: Inicia ventana maximizada (solo modo no-headless). Impacto: BAJO - Apariencia más natural en modo visible.

Flags de Evasión Avanzada

5. User Agent y Detección de Plataforma

"--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"

Propósito: Sobrescribe el user agent del navegador. Impacto: ALTO - Debe coincidir con la plataforma y versión de Chrome real. Nota: Actualizar según versión de Chrome instalada.

6. Permisos y Notificaciones

"--disable-notifications"

Propósito: Bloquea solicitudes de notificaciones del navegador. Impacto: BAJO - Evita interrupciones molestas.

"--disable-popup-blocking"

Propósito: Permite abrir popups sin bloqueo. Impacto: BAJO - Útil para algunos flujos de autenticación.

7. Seguridad y Privacidad

"--disable-web-security"

Propósito: Desactiva CORS y otras políticas de seguridad. Impacto: MEDIO - Útil para testing, pero inseguro. ⚠️ COMENTAR POR DEFECTO - Solo activar si es necesario.

"--disable-features=IsolateOrigins,site-per-process"

Propósito: Desactiva aislamiento de procesos por sitio. Impacto: BAJO - Reduce consumo de memoria. ⚠️ COMENTAR POR DEFECTO - Puede afectar estabilidad.

"--disable-site-isolation-trials"

Propósito: Desactiva experimentos de aislamiento de sitios. Impacto: BAJO - Complementa flags anteriores.

8. Optimización de Rendimiento

"--disable-dev-shm-usage"

Propósito: Evita uso de /dev/shm en Docker/containers. Impacto: MEDIO - Crítico en entornos containerizados.

"--no-sandbox"

Propósito: Desactiva sandbox de Chrome. Impacto: ALTO - PELIGROSO - Solo usar en entornos confiables (Docker, VMs). ⚠️ COMENTAR POR DEFECTO - Riesgo de seguridad.

"--disable-setuid-sandbox"

Propósito: Desactiva sandbox SUID. Impacto: MEDIO - Similar a --no-sandbox. ⚠️ COMENTAR POR DEFECTO - Usar solo si --no-sandbox está activo.

9. Extensions y Plugins

"--disable-extensions"

Propósito: Desactiva todas las extensiones de Chrome. Impacto: BAJO - Reduce superficie de detección.

"--disable-plugins"

Propósito: Desactiva plugins (Flash, PDF viewer, etc). Impacto: BAJO - Mejora rendimiento.

10. Logs y Debugging

"--enable-logging"

Propósito: Activa logs de Chrome. Impacto: BAJO - Útil para debugging. ⚠️ COMENTAR EN PRODUCCIÓN

"--v=1"

Propósito: Nivel de verbosidad de logs (0-3). Impacto: BAJO - Combinar con --enable-logging.

"--log-level=0"

Propósito: Nivel de log (0=INFO, 1=WARNING, 2=ERROR). Impacto: BAJO - Control fino de logs.

11. Características Especiales

"--disable-background-timer-throttling"

Propósito: Evita throttling de timers en background. Impacto: BAJO - Útil para scrapers que esperan en background.

"--disable-backgrounding-occluded-windows"

Propósito: Evita suspensión de ventanas ocultas. Impacto: BAJO - Mantiene páginas activas aunque no sean visibles.

"--disable-renderer-backgrounding"

Propósito: Evita que el renderer entre en modo background. Impacto: BAJO - Mejora consistencia en ejecución.

"--disable-ipc-flooding-protection"

Propósito: Desactiva protección contra flooding de IPC. Impacto: BAJO - Útil cuando se envían muchos comandos CDP rápidamente.

12. Features de Chrome a Desactivar

"--disable-features=TranslateUI"

Propósito: Desactiva ofertas de traducción automática. Impacto: BAJO - Menos interrupciones.

"--disable-features=PrivacySandboxSettings4"

Propósito: Desactiva configuración de Privacy Sandbox. Impacto: BAJO - Reduce telemetría.

Flags para Contextos Específicos

Docker/Containers

"--no-sandbox"
"--disable-setuid-sandbox"
"--disable-dev-shm-usage"

Headless Máximo Sigilo

"--headless=new"
"--disable-gpu"
"--hide-scrollbars"
"--mute-audio"

Debugging

"--enable-logging"
"--v=1"
"--remote-debugging-port=0"  // Puerto aleatorio, CDP asignará uno

Configuración Recomendada por Defecto

var DefaultStealthFlags = []string{
    // CRÍTICAS - Siempre activadas
    "--disable-blink-features=AutomationControlled",
    "--exclude-switches=enable-automation",

    // Headless moderno
    "--headless=new",
    "--disable-gpu",

    // Ventana
    "--window-size=1920,1080",

    // Optimización
    "--disable-dev-shm-usage",
    "--disable-extensions",

    // Estabilidad
    "--disable-background-timer-throttling",
    "--disable-backgrounding-occluded-windows",
    "--disable-renderer-backgrounding",

    // Menos ruido
    "--disable-notifications",
    "--disable-features=TranslateUI",

    // COMENTADAS - Activar según necesidad:
    // "--no-sandbox",  // Solo Docker/confiable
    // "--disable-web-security",  // Solo para testing
    // "--enable-logging",  // Solo debugging
}

JavaScript Injection Anti-Detección

Además de las flags, inyectar este script en cada página:

// Sobrescribir propiedades que delatan automatización
Object.defineProperty(navigator, 'webdriver', {
    get: () => undefined
});

// Eliminar _selenium, _webdriver, callSelenium
delete window.navigator.__proto__.webdriver;

// Chrome runtime mock
window.chrome = {
    runtime: {},
    loadTimes: function() {},
    csi: function() {},
    app: {}
};

// Permisos mock
const originalQuery = window.navigator.permissions.query;
window.navigator.permissions.query = (parameters) => (
    parameters.name === 'notifications' ?
        Promise.resolve({ state: Notification.permission }) :
        originalQuery(parameters)
);

// Plugin array fix
Object.defineProperty(navigator, 'plugins', {
    get: () => [1, 2, 3, 4, 5]
});

// Languages fix
Object.defineProperty(navigator, 'languages', {
    get: () => ['en-US', 'en']
});

Orden de Prioridad

  1. CRÍTICO: --disable-blink-features=AutomationControlled
  2. CRÍTICO: --exclude-switches=enable-automation
  3. CRÍTICO: --user-data-dir (perfiles persistentes)
  4. ALTO: --headless=new (o omitir para modo visible)
  5. ALTO: User-Agent correcto
  6. MEDIO: Window size realista
  7. MEDIO: JavaScript injection anti-detección
  8. BAJO: Resto de flags según contexto

Referencias