# 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 ```bash 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:** ```bash # 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`):** ```bash 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`: ```bash export NAVEGATOR_PROFILES="$HOME/shared-profiles" ``` Modificar binarios para leer: ```go profilesDir := os.Getenv("NAVEGATOR_PROFILES") if profilesDir == "" { profilesDir = filepath.Join(homeDir, ".navegator", "profiles") } ``` #### **Opción C: Copiar carpeta de perfiles** ```bash # Copiar perfiles entre proyectos cp -r ~/proyecto1/perfiles ~/proyecto2/ # Sincronizar cambios rsync -av ~/proyecto1/perfiles/ ~/proyecto2/perfiles/ ``` #### **Opción D: Symlink** ```bash # 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: ```bash # 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:** ```bash ./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:** ```bash # 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: ```bash # 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** ```bash #!/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. ```bash # 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: ```bash # 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: ```bash # 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** ```bash # 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** ```bash #!/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** ```bash #!/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** ```bash #!/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** ```bash # ❌ Mal perfil1, perfil2, test, abc # ✅ Bien github-devuser-1 scraper-bot-2024-01 researcher-project-alpha ``` ### **2. Perfiles Base + Clones** ```bash # 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** ```bash # Eliminar clones temporales después de usar rm -rf perfiles/*-clone-* rm -rf perfiles/temp-* # Mantener solo perfiles base ``` ### **4. Backup de Perfiles Importantes** ```bash # 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** ```bash # 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** ```bash # 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: ```bash # 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** ```bash # ❌ 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:** ```bash ./scripts/clonar_perfil.sh base-perfil clon-1 ``` Esto te permite usar el mismo perfil (cookies, sesión) en múltiples instancias simultáneas.