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>
8.9 KiB
Binarios de Automatización - Navegator
Herramientas CLI standalone para automatizar navegación web.
🎯 Características Principales
✅ Perfiles Personalizables: Cada binario puede usar cualquier perfil ✅ Cookies Separadas: Simula usuarios diferentes sin conflictos ✅ Sin Dependencias: Solo el binario ejecutable ✅ Output Estructurado: JSON, PNG, logs ✅ Stealth Completo: Flags anti-detección incluidas
📦 Binarios Disponibles
1. screenshot - Captura de Pantalla
Captura screenshots de cualquier página web.
# Compilar
go build -o screenshot cmd/screenshot.go
# Uso básico
./screenshot -url https://example.com
# Con perfil específico
./screenshot -url https://github.com -profile mi-usuario -o github.png
# Página completa, modo visible
./screenshot -url https://news.ycombinator.com -full=true -headless=false
# Resolución personalizada
./screenshot -url https://google.com -width=1920 -height=1080 -o google_hd.png
Parámetros:
-url(requerido): URL a capturar-profile(default: screenshot-bot): Perfil de navegador-o(default: screenshot.png): Archivo de salida-headless(default: true): Modo headless-full(default: false): Captura página completa-width(default: 1280): Ancho de ventana-height(default: 720): Alto de ventana
2. buscar - Motor de Búsqueda
Busca en DuckDuckGo y extrae resultados estructurados.
# Compilar
go build -o buscar cmd/buscar.go
# Uso básico
./buscar -q "golang tutorial"
# Con perfil y más resultados
./buscar -q "python web scraping" -n 20 -profile researcher-bot
# Guardar en JSON
./buscar -q "nodejs frameworks" -output resultados.json
# Modo visible para debugging
./buscar -q "react hooks" -headless=false -profile dev-session
Parámetros:
-q(requerido): Consulta de búsqueda-profile(default: search-bot): Perfil de navegador-n(default: 10): Número máximo de resultados-output(opcional): Guardar resultados en JSON-headless(default: true): Modo headless
Output JSON:
[
{
"titulo": "Tutorial de Golang",
"url": "https://...",
"descripcion": "Aprende Go desde cero..."
}
]
3. navegar - Navegación Interactiva
Navega a URLs, interactúa con elementos, y registra acciones.
# Compilar
go build -o navegar cmd/navegar.go
# Navegación simple
./navegar -url https://example.com -profile usuario1
# Con click en elemento
./navegar -url https://github.com -click "a[href='/explore']" -profile dev1
# Llenar formulario
./navegar -url https://httpbin.org/forms/post \
-type "input[name='custname']" \
-text "Juan Pérez" \
-profile test-user
# Mantener abierto más tiempo
./navegar -url https://reddit.com -duration 30 -headless=false -profile lurker
# Sesión completa con recording
./navegar -url https://example.com \
-profile session-abc \
-click "button.primary" \
-duration 15
Parámetros:
-url(requerido): URL a visitar-profile(default: user-default): Perfil de navegador-click(opcional): Selector CSS para hacer click-type(opcional): Selector CSS donde escribir-text(opcional): Texto a escribir (requiere -type)-headless(default: false): Modo headless-duration(default: 10): Segundos que mantener abierto
Genera: recording_<profile>.log con todas las acciones
🎭 Simulación de Usuarios Orgánicos
Concepto de Perfiles
Cada perfil es un usuario virtual independiente:
perfiles/
├── usuario-juan/ # Juan - desarrollador
├── usuario-maria/ # Maria - diseñadora
├── bot-research-1/ # Bot de investigación #1
├── bot-research-2/ # Bot de investigación #2
└── session-temp/ # Sesión temporal
Cada perfil mantiene:
- ✅ Cookies propias
- ✅ LocalStorage separado
- ✅ Historial independiente
- ✅ Cache aislado
- ✅ User-Agent persistente
Ejemplo: Múltiples Usuarios
# Usuario 1: Busca tutoriales de Go
./buscar -q "golang tutorial" -profile dev-juan -n 10
# Usuario 2: Busca Python
./buscar -q "python basics" -profile student-maria -n 15
# Usuario 3: Captura diseños
./screenshot -url https://dribbble.com -profile designer-pedro
# Reutilizar perfil de Juan (tiene sus cookies)
./navegar -url https://github.com -profile dev-juan
Script de Demostración
./ejemplos_perfiles.sh
Simula 3 usuarios diferentes navegando automáticamente.
🔄 Casos de Uso
1. Monitoreo Multi-Cuenta
# Revisar 5 cuentas diferentes
for i in {1..5}; do
./navegar -url https://miapp.com/dashboard \
-profile account-$i \
-duration 5
done
2. A/B Testing
# Probar con diferentes perfiles (cookies diferentes)
./screenshot -url https://miapp.com -profile user-a -o version-a.png
./screenshot -url https://miapp.com -profile user-b -o version-b.png
3. Scraping Distribuido
# Buscar desde múltiples "usuarios"
./buscar -q "keyword1" -profile bot-1 -output bot1.json &
./buscar -q "keyword2" -profile bot-2 -output bot2.json &
./buscar -q "keyword3" -profile bot-3 -output bot3.json &
wait
4. Testing de Sesiones
# Login con usuario A
./navegar -url https://app.com/login \
-type "#username" -text "userA" \
-profile session-a
# Verificar que usuario B no tiene acceso
./navegar -url https://app.com/dashboard \
-profile session-b
🐍 Integración con Python
import subprocess
import json
# Buscar desde Python con perfil específico
result = subprocess.run([
'./buscar',
'-q', 'python tutorial',
'-n', '10',
'-profile', 'python-bot',
'-output', 'temp.json'
], capture_output=True, text=True)
# Parsear resultados
with open('temp.json') as f:
results = json.load(f)
for r in results:
print(f"{r['titulo']}: {r['url']}")
# Screenshot con perfil rotativo
profiles = ['user1', 'user2', 'user3']
for i, profile in enumerate(profiles):
subprocess.run([
'./screenshot',
'-url', 'https://example.com',
'-profile', profile,
'-o', f'capture_{i}.png'
])
🛡️ Stealth y Anti-Detección
Todos los binarios incluyen automáticamente:
✅ navigator.webdriver = false
✅ Sin banners de "controlado por automatización"
✅ Headers realistas
✅ Timing humano en Type
✅ User-Agent personalizable
✅ Sin extensiones sospechosas
Para máximo stealth:
# Usar modo visible (menos detectable)
./navegar -url https://sitio-estricto.com -headless=false -profile real-user
# Mantener sesión larga (más orgánico)
./navegar -url https://ejemplo.com -duration 60 -profile organic-session
📝 Logs y Debugging
Cada binario genera logs:
# buscar y navegar generan logs automáticos
./navegar -url https://example.com -profile test1
# Crea: recording_test1.log
# Ver log
cat recording_test1.log
Formato del log:
{"timestamp":"...","type":"Navigate","params":{"url":"..."}}
# 22:49:11 - Navigate: https://example.com
{"timestamp":"...","type":"Click","params":{"selector":"button"}}
# 22:49:12 - Click: button
🚀 Performance
Headless vs Visible:
- Headless: Más rápido, menos memoria
- Visible: Más sigiloso, debugging más fácil
Perfiles:
- Primer uso: ~2-3 segundos (crea perfil)
- Usos siguientes: ~1 segundo (reutiliza)
Limitar perfiles:
# Limpiar perfiles viejos
rm -rf perfiles/temp-*
rm -rf perfiles/bot-old-*
💡 Tips
-
Nombres descriptivos de perfiles:
./buscar -q "query" -profile "research-$(date +%Y%m%d)" -
Rotación automática:
PROFILE="user-$RANDOM" ./screenshot -url https://example.com -profile "$PROFILE" -
Perfiles temporales:
./navegar -url https://test.com -profile "temp-$$" rm -rf perfiles/temp-* # Limpiar después -
Compartir perfil entre binarios:
# Misma sesión, diferentes tools ./navegar -url https://github.com -profile dev-session ./screenshot -url https://github.com/trending -profile dev-session # Ambos comparten las mismas cookies!
🔧 Compilar Todos
# Compilar todos los binarios
go build -o screenshot cmd/screenshot.go
go build -o buscar cmd/buscar.go
go build -o navegar cmd/navegar.go
# O con un script
for cmd in cmd/*.go; do
name=$(basename "$cmd" .go)
go build -o "$name" "$cmd"
echo "✅ $name compilado"
done
📚 Crear Tus Propios Binarios
Usa el patrón de cmd/*.go:
package main
import (
"flag"
"navegator/pkg/browser"
)
func main() {
url := flag.String("url", "", "URL")
profile := flag.String("profile", "mi-bot", "Perfil")
flag.Parse()
config := browser.DefaultConfig()
config.ProfileName = *profile
// ... tu lógica
}
Ventajas:
- ✅ Cada binario es independiente
- ✅ Fácil de distribuir
- ✅ Parámetros CLI estándar
- ✅ Perfiles automáticos