package main import ( "context" "fmt" "log" "os" "os/signal" "path/filepath" "syscall" "navegator/pkg/browser" ) func main() { ctx := context.Background() // Obtener ruta absoluta de perfiles currentDir, err := os.Getwd() if err != nil { log.Fatalf("Error al obtener directorio actual: %v", err) } profilesDir := filepath.Join(currentDir, "perfiles") // Configuración config := browser.DefaultConfig() config.ProfilesBaseDir = profilesDir config.ProfileName = "test-profile" // Modo visible (cambiar a true para headless) config.StealthFlags.Headless = false // Ventana más pequeña config.StealthFlags.WindowSize = [2]int{1280, 720} log.Println("========================================") log.Println("Navegator - Control de Chrome via CDP") log.Println("========================================") log.Printf("Directorio de perfiles: %s\n", profilesDir) log.Printf("Perfil: %s\n", config.ProfileName) log.Println("Lanzando navegador...") // Lanzar navegador b, err := browser.Launch(ctx, config) if err != nil { log.Fatalf("❌ Error al lanzar navegador: %v", err) } defer b.Close() log.Println("✅ Navegador lanzado exitosamente!") log.Printf("📂 Perfil ubicado en: %s\n", b.ProfilePath()) log.Printf("🔧 Debug URL: %s\n", b.DebugURL()) // Iniciar recording de acciones recordingFile := filepath.Join(currentDir, "session.log") if err := b.StartRecording(recordingFile); err != nil { log.Printf("⚠️ No se pudo iniciar recording: %v", err) } else { log.Printf("📝 Recording activado: %s\n", recordingFile) } // Navegar a página de prueba b.AddComment("=== INICIO DE SESIÓN ===") log.Println("\n📍 Navegando a example.com...") navOpts := browser.DefaultNavigateOptions() navOpts.WaitUntil = "load" if err := b.Navigate(ctx, "https://example.com", navOpts); err != nil { log.Printf("❌ Error al navegar: %v", err) } else { log.Println("✅ Navegación completada") } b.AddComment("Página cargada correctamente") // Obtener información de la página log.Println("\n📊 Obteniendo información de la página...") title, _ := b.Evaluate(ctx, "document.title") log.Printf(" Título: %v", title.Value) url, _ := b.Evaluate(ctx, "window.location.href") log.Printf(" URL: %v", url.Value) h1Text, _ := b.GetText(ctx, "h1") log.Printf(" H1: %s", h1Text) // Verificar stealth log.Println("\n🕵️ Verificando stealth...") webdriver, _ := b.Evaluate(ctx, "navigator.webdriver") log.Printf(" navigator.webdriver: %v", webdriver.Value) hasChrome, _ := b.Evaluate(ctx, "typeof window.chrome !== 'undefined'") log.Printf(" window.chrome existe: %v", hasChrome.Value) // Mantener navegador abierto log.Println("\n✋ Navegador abierto. Presiona Ctrl+C para cerrar...") // Esperar señal de interrupción sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) <-sigChan fmt.Println("\n👋 Cerrando navegador...") }