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>
11 KiB
Gestión Avanzada de Perfiles
Guía completa para mover binarios entre proyectos y usar perfiles en paralelo.
🗂️ Problema 1: Mover Binarios a Otro Repo
❌ Problema
proyecto1/
├── buscar
└── perfiles/
└── mi-usuario/
└── cookies.db
# Copias binario a proyecto2
proyecto2/
├── buscar # ❌ Busca perfiles en ./perfiles/ (no existe)
✅ Soluciones
Opción A: Usar carpeta compartida en HOME (RECOMENDADA)
Ventajas:
- ✅ Perfiles accesibles desde cualquier proyecto
- ✅ No duplicar datos
- ✅ Mantiene cookies entre proyectos
Ubicación por defecto:
~/.navegator/profiles/
├── usuario1/
├── bot-research/
└── dev-session/
Uso:
# En cualquier proyecto, funciona automáticamente
cd ~/proyecto1
./buscar -q "golang" -profile usuario1
cd ~/proyecto2
./buscar -q "python" -profile usuario1
# ↑ Usa el MISMO perfil con cookies compartidas
Si compilaste con la nueva versión (buscar_v2.go):
go build -o buscar cmd/buscar_v2.go
# Default: ~/.navegator/profiles
./buscar -q "golang" -profile mi-usuario
# Custom: especificar ruta
./buscar -q "golang" -profile mi-usuario -profiles-dir /ruta/custom
Opción B: Variable de entorno
Agregar a .bashrc o .zshrc:
export NAVEGATOR_PROFILES="$HOME/shared-profiles"
Modificar binarios para leer:
profilesDir := os.Getenv("NAVEGATOR_PROFILES")
if profilesDir == "" {
profilesDir = filepath.Join(homeDir, ".navegator", "profiles")
}
Opción C: Copiar carpeta de perfiles
# Copiar perfiles entre proyectos
cp -r ~/proyecto1/perfiles ~/proyecto2/
# Sincronizar cambios
rsync -av ~/proyecto1/perfiles/ ~/proyecto2/perfiles/
Opción D: Symlink
# Crear carpeta compartida
mkdir -p ~/shared-navegator-profiles
# En cada proyecto
cd ~/proyecto1
ln -s ~/shared-navegator-profiles perfiles
cd ~/proyecto2
ln -s ~/shared-navegator-profiles perfiles
# Ambos apuntan al mismo directorio físico
🔀 Problema 2: Mismo Perfil en Paralelo
❌ No Funciona Directamente
Chrome bloquea múltiples instancias del mismo perfil:
# Terminal 1
./buscar -q "golang" -profile usuario1 # ✅ OK
# Terminal 2 (simultáneamente)
./buscar -q "python" -profile usuario1 # ❌ ERROR
# Chrome error: Profile is already in use
Archivos de lock:
perfiles/usuario1/
├── SingletonLock # Bloquea acceso múltiple
├── SingletonSocket # Socket de comunicación
└── SingletonCookie # Cookie de instancia
✅ Soluciones
Solución 1: Clonar perfiles antes de usar (RECOMENDADA)
Script automático:
./scripts/clonar_perfil.sh usuario-base usuario-clon-1
./scripts/clonar_perfil.sh usuario-base usuario-clon-2
./scripts/clonar_perfil.sh usuario-base usuario-clon-3
# Ahora usar en paralelo
./buscar -q "query1" -profile usuario-clon-1 &
./buscar -q "query2" -profile usuario-clon-2 &
./buscar -q "query3" -profile usuario-clon-3 &
wait
¿Qué hace el script?
- Copia el perfil completo (cookies, cache, historial)
- Elimina archivos de lock
- Crea perfil independiente listo para usar
Ejemplo completo:
# 1. Crear perfil base con login/cookies
./navegar -url https://github.com -profile github-base
# ... hacer login manualmente ...
# 2. Clonar para uso paralelo
for i in {1..5}; do
./scripts/clonar_perfil.sh github-base github-worker-$i
done
# 3. Usar en paralelo (todos con la misma sesión)
for i in {1..5}; do
./buscar -q "topic-$i" -profile github-worker-$i &
done
wait
Solución 2: Usar perfiles diferentes
Diseñar desde el inicio con múltiples perfiles:
# Crear perfiles específicos
./navegar -url https://app.com -profile worker-1
./navegar -url https://app.com -profile worker-2
./navegar -url https://app.com -profile worker-3
# Usar en paralelo
./buscar -q "query1" -profile worker-1 &
./buscar -q "query2" -profile worker-2 &
./buscar -q "query3" -profile worker-3 &
Solución 3: Pool de perfiles rotativos
#!/bin/bash
# pool_buscar.sh
PROFILES=("bot-1" "bot-2" "bot-3" "bot-4" "bot-5")
QUERIES=("golang" "python" "rust" "javascript" "java")
for i in "${!QUERIES[@]}"; do
PROFILE="${PROFILES[$i]}"
QUERY="${QUERIES[$i]}"
echo "🔍 Buscando '$QUERY' con perfil $PROFILE"
./buscar -q "$QUERY" -profile "$PROFILE" -output "result_$i.json" &
done
wait
echo "✅ Todas las búsquedas completadas"
📊 Casos de Uso Reales
Caso 1: Scraping Multi-Cuenta
Necesitas hacer scraping con 10 cuentas diferentes simultáneamente.
# Preparación (una vez)
for i in {1..10}; do
./navegar -url https://sitio.com/login \
-profile account-$i \
-type "#username" -text "user$i" \
-duration 5
# Hacer login manualmente si es necesario
done
# Uso (todas a la vez)
for i in {1..10}; do
./navegar -url https://sitio.com/dashboard \
-profile account-$i \
-duration 10 &
done
wait
Caso 2: A/B Testing con Misma Sesión
Probar variantes con cookies idénticas:
# Crear perfil base
./navegar -url https://app.com -profile base-session
# ... configurar cookies/preferencias ...
# Clonar para cada variante
./scripts/clonar_perfil.sh base-session variant-a
./scripts/clonar_perfil.sh base-session variant-b
# Probar en paralelo
./screenshot -url https://app.com?variant=a -profile variant-a -o test-a.png &
./screenshot -url https://app.com?variant=b -profile variant-b -o test-b.png &
wait
# Comparar resultados
compare test-a.png test-b.png diff.png
Caso 3: Búsqueda Distribuida
Buscar múltiples keywords sin rate limiting:
# Crear pool de 20 perfiles
for i in {1..20}; do
./scripts/clonar_perfil.sh base-search search-worker-$i
done
# Buscar 100 keywords en paralelo (lotes de 20)
keywords=("keyword1" "keyword2" ... "keyword100")
for i in "${!keywords[@]}"; do
profile_idx=$((i % 20 + 1))
./buscar -q "${keywords[$i]}" \
-profile "search-worker-$profile_idx" \
-output "result_$i.json" &
# Cada 20 búsquedas, esperar
if [ $((i % 20)) -eq 19 ]; then
wait
fi
done
Caso 4: Proyectos Diferentes, Mismo Perfil
# Proyecto 1: Análisis de datos
cd ~/proyecto-scraper
./buscar -q "data science" -profile researcher-123
# Proyecto 2: Generación de reportes
cd ~/proyecto-reportes
./screenshot -url https://dashboard.com -profile researcher-123
# ↑ Usa las mismas cookies del perfil!
# Proyecto 3: Monitoreo
cd ~/proyecto-monitor
./navegar -url https://app.com/status -profile researcher-123
Resultado: El perfil researcher-123 se comparte entre los 3 proyectos sin duplicar datos.
🛠️ Herramientas Útiles
Ver perfiles activos
#!/bin/bash
# ver_perfiles_activos.sh
echo "🔍 Perfiles actualmente en uso:"
echo ""
PROFILES_DIR="$HOME/.navegator/profiles"
for profile in "$PROFILES_DIR"/*; do
if [ -d "$profile" ]; then
name=$(basename "$profile")
if [ -f "$profile/SingletonLock" ]; then
pid=$(cat "$profile/SingletonLock" 2>/dev/null | grep -oP '\d+')
echo "🟢 $name (PID: $pid)"
else
echo "⚪ $name (libre)"
fi
fi
done
Limpiar perfiles no usados
#!/bin/bash
# limpiar_perfiles_viejos.sh
PROFILES_DIR="$HOME/.navegator/profiles"
DAYS=30
echo "🗑️ Eliminando perfiles sin usar en $DAYS días..."
find "$PROFILES_DIR" -maxdepth 1 -type d -mtime +$DAYS | while read profile; do
if [ "$profile" != "$PROFILES_DIR" ]; then
name=$(basename "$profile")
echo " Eliminando: $name"
rm -rf "$profile"
fi
done
echo "✅ Limpieza completada"
Sincronizar perfiles entre máquinas
#!/bin/bash
# sync_perfiles.sh
REMOTE_HOST="servidor.com"
REMOTE_USER="usuario"
LOCAL_DIR="$HOME/.navegator/profiles"
REMOTE_DIR="/home/$REMOTE_USER/.navegator/profiles"
echo "📤 Subiendo perfiles al servidor..."
rsync -avz --progress "$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
echo "✅ Sincronización completada"
📝 Mejores Prácticas
1. Nomenclatura de Perfiles
# ❌ Mal
perfil1, perfil2, test, abc
# ✅ Bien
github-devuser-1
scraper-bot-2024-01
researcher-project-alpha
2. Perfiles Base + Clones
# Crear perfil base con configuración
base-authenticated/
# Clonar para uso paralelo
base-authenticated-clone-1/
base-authenticated-clone-2/
base-authenticated-clone-3/
3. Limpieza Regular
# Eliminar clones temporales después de usar
rm -rf perfiles/*-clone-*
rm -rf perfiles/temp-*
# Mantener solo perfiles base
4. Backup de Perfiles Importantes
# Backup
tar -czf perfiles-backup-$(date +%Y%m%d).tar.gz perfiles/
# Restaurar
tar -xzf perfiles-backup-20260324.tar.gz
⚡ Performance
Perfiles ligeros vs pesados
# Perfil nuevo (primera vez): 2-3 segundos
./buscar -q "query" -profile nuevo-perfil
# Perfil existente: 1 segundo
./buscar -q "query" -profile perfil-usado
# Perfil con mucho cache: 1-2 segundos
Límites prácticos
- ✅ 5-10 perfiles en paralelo: Funciona bien
- ⚠️ 20-30 perfiles en paralelo: Depende del CPU/RAM
- ❌ 50+ perfiles en paralelo: Puede saturar sistema
Optimización
# Ejecutar en lotes
for i in {1..100}; do
./buscar -q "query$i" -profile "bot-$((i % 10))" &
# Cada 10, esperar
if [ $((i % 10)) -eq 9 ]; then
wait
fi
done
🔒 Seguridad
Perfiles sensibles
Si tus perfiles tienen sesiones autenticadas:
# Proteger perfiles
chmod 700 ~/.navegator/profiles/
chmod 600 ~/.navegator/profiles/*/cookies*
# Encriptar backup
tar -czf - perfiles/ | gpg -c > perfiles-encrypted.tar.gz.gpg
No compartir perfiles con credenciales
# ❌ NO hacer
git add perfiles/
git commit -m "Added profiles" # Expondrías cookies/tokens
# ✅ Hacer
echo "perfiles/" >> .gitignore
📚 Resumen
| Escenario | Solución |
|---|---|
| Mover binario a otro repo | Usar ~/.navegator/profiles (compartido) |
| Mismo perfil en paralelo | Clonar con clonar_perfil.sh |
| Múltiples proyectos | Flag -profiles-dir o symlink |
| Scraping masivo | Pool de perfiles + rotación |
| A/B testing | Clonar perfil base para cada variante |
| Sincronizar entre máquinas | rsync de ~/.navegator/profiles |
Comando más útil:
./scripts/clonar_perfil.sh base-perfil clon-1
Esto te permite usar el mismo perfil (cookies, sesión) en múltiples instancias simultáneas.