Files
navegator/README.md
T
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

235 lines
6.0 KiB
Markdown

# Navegator
Sistema en Go para control de Chrome/Chromium via Chrome DevTools Protocol (CDP) diseñado para automatización sigilosa con LLMs.
## Características
- **Control CDP Directo**: Comunicación WebSocket con Chrome sin dependencias de librerías de alto nivel
- **Stealth Completo**: Flags optimizadas para evitar detección de automatización
- **Perfiles Persistentes**: Gestión de perfiles de usuario con cookies y sesiones reutilizables
- **API Completa**: Navegación, interacción, cookies, storage, interceptación de red, evaluación de JavaScript
## Instalación
```bash
# Clonar repositorio
git clone <repo-url>
cd navegator
# Descargar dependencias
go mod download
# Compilar ejemplo básico
go build -o navegator-basic examples/basic.go
# Ejecutar
./navegator-basic
```
## Requisitos
- Go 1.21+
- Chrome o Chromium instalado en el sistema
- WebSocket support (gorilla/websocket)
## Uso Básico
```go
package main
import (
"context"
"log"
"navegator/pkg/browser"
)
func main() {
ctx := context.Background()
// Configuración por defecto
config := browser.DefaultConfig()
config.ProfileName = "mi-perfil"
// Lanzar navegador
b, err := browser.Launch(ctx, config)
if err != nil {
log.Fatal(err)
}
defer b.Close()
// Navegar
b.Navigate(ctx, "https://example.com", nil)
// Obtener HTML
html, _ := b.GetHTML(ctx, "")
log.Println(html)
}
```
## Estructura del Proyecto
```
navegator/
├── bin/ # Binarios compilados
│ ├── screenshot # Capturador de pantalla
│ ├── buscar # Motor de búsqueda
│ └── navegar # Navegador interactivo
├── cmd/ # Código fuente de binarios
│ ├── screenshot.go
│ ├── buscar.go
│ └── navegar.go
├── pkg/ # Librerías reutilizables
│ ├── cdp/ # Cliente CDP de bajo nivel
│ ├── browser/ # API de alto nivel del navegador
│ └── stealth/ # Configuración de flags stealth
├── scripts/ # Scripts de utilidad
│ ├── clonar_perfil.sh # Clonar perfiles para uso paralelo
│ ├── demo_paralelo.sh # Demo de múltiples usuarios
│ └── ejemplos_perfiles.sh
├── docs/ # Documentación
│ ├── STEALTH_FLAGS.md # Flags anti-detección
│ ├── BINARIOS.md # Guía de binarios
│ ├── PERFILES_AVANZADO.md # Gestión de perfiles
│ └── TESTING.md # Guía de testing
├── e2e/ # Tests E2E
│ ├── e2e_test.sh # Tests de binarios
│ └── integration_test.sh # Tests de integración
├── examples/ # Ejemplos de código
│ ├── basic.go
│ └── advanced.go
├── Makefile # Comandos de build y test
└── README.md
```
## Capacidades
### Navegación
- Navigate, Reload, GoBack, GoForward
- WaitForSelector con timeout
- Click, Type, Focus
- Screenshot (viewport o página completa)
- GetHTML, GetText
### Cookies & Storage
- GetCookies, SetCookie, DeleteCookie, ClearCookies
- LocalStorage: Get, Set, Remove, Clear
- SessionStorage: Get, Set, Remove, Clear
- ClearDataForOrigin
### Network
- EnableNetworkInterception
- BlockURLs, BlockResourceTypes
- ModifyHeaders
- SetExtraHTTPHeaders
- SetUserAgent
- EmulateNetworkConditions
- DisableCache
### JavaScript
- Evaluate (sync)
- EvaluateAsync (promises)
- CallFunction con argumentos
- AddBinding (exponer funciones Go a JS)
- OnConsole (monitorear console.log)
- WaitForFunction
## Perfiles Persistentes
Los perfiles se guardan en `~/.navegator/profiles/<nombre>/`:
```go
config := browser.DefaultConfig()
config.ProfileName = "session-1" // Reutilizable entre ejecuciones
```
Cada perfil mantiene:
- Cookies
- LocalStorage/SessionStorage
- Historial
- Extensiones
- Preferencias
## Stealth Flags
Ver `docs/STEALTH_FLAGS.md` para documentación completa de todas las flags.
Configuración básica:
```go
config.StealthFlags.Headless = true
config.StealthFlags.NoSandbox = false // Solo en Docker
config.StealthFlags.UserAgent = "Mozilla/5.0 ..."
config.StealthFlags.WindowSize = [2]int{1920, 1080}
```
## Ejemplos
### Ejemplo 1: Navegación Básica
```bash
go run examples/basic.go
```
### Ejemplo 2: Capacidades Avanzadas
```bash
go run examples/advanced.go
```
## Para LLMs
Este sistema está diseñado para ser controlado por LLMs. La API es:
1. **Declarativa**: Métodos claros como `Navigate()`, `Click()`, `Type()`
2. **Contextual**: Usa selectores CSS estándar
3. **Asíncrona**: Manejo de timeouts y esperas automáticas
4. **Completa**: Todas las capacidades CDP disponibles
Ejemplo de prompt para LLM:
```
Usando el sistema navegator:
1. Lanza un navegador con perfil "agent-123"
2. Navega a https://example.com
3. Obtén el texto del h1
4. Toma un screenshot
5. Cierra el navegador
```
## Flags Stealth Críticas
**SIEMPRE ACTIVADAS**:
- `--disable-blink-features=AutomationControlled`
- `--exclude-switches=enable-automation`
- `--user-data-dir=<path>` (perfiles persistentes)
**CONTEXTUALES**:
- `--headless=new` (modo headless moderno)
- `--no-sandbox` (SOLO en Docker/containers)
- `--disable-web-security` (SOLO en testing)
## Debugging
```go
config.StealthFlags.EnableLogging = true
config.StealthFlags.LogLevel = 0 // INFO
```
URL de debugging disponible en `b.DebugURL()`:
```
http://127.0.0.1:<port>
```
## Seguridad
⚠️ **IMPORTANTE**:
- `--no-sandbox` es PELIGROSO - solo usar en entornos confiables
- `--disable-web-security` desactiva CORS - solo para testing
- Los perfiles pueden contener datos sensibles - proteger adecuadamente
## Licencia
MIT
## Referencias
- [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/)
- [Chrome Command Line Switches](https://peter.sh/experiments/chromium-command-line-switches/)
- [Puppeteer Stealth Plugin](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)