Files
navegator/docs/PERFILES_AVANZADO.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

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/
# 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?

  1. Copia el perfil completo (cookies, cache, historial)
  2. Elimina archivos de lock
  3. 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.