package main import ( "context" "fmt" "log" "time" "navegator/pkg/browser" ) func main() { ctx := context.Background() // Configuración avanzada config := browser.DefaultConfig() config.ProfileName = "advanced-agent" // Personalizar flags stealth config.StealthFlags.Headless = true config.StealthFlags.NoSandbox = false // Solo activar en Docker config.StealthFlags.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" log.Println("Lanzando navegador con configuración avanzada...") b, err := browser.Launch(ctx, config) if err != nil { log.Fatalf("Error: %v", err) } defer b.Close() // ======================================== // EJEMPLO 1: Gestión de Cookies // ======================================== log.Println("\n=== EJEMPLO 1: Cookies ===") // Establecer una cookie cookie := browser.CreateCookie("session_id", "abc123", ".example.com") if err := b.SetCookie(ctx, cookie); err != nil { log.Printf("Error al establecer cookie: %v", err) } else { log.Println("Cookie establecida exitosamente") } // ======================================== // EJEMPLO 2: LocalStorage // ======================================== log.Println("\n=== EJEMPLO 2: LocalStorage ===") // Navegar primero b.Navigate(ctx, "https://example.com", nil) time.Sleep(1 * time.Second) // Establecer items en localStorage if err := b.SetLocalStorage(ctx, "user_preference", "dark_mode"); err != nil { log.Printf("Error: %v", err) } else { log.Println("LocalStorage item establecido") } // Leer localStorage items, err := b.GetLocalStorage(ctx) if err != nil { log.Printf("Error: %v", err) } else { log.Printf("LocalStorage items: %d\n", len(items)) for _, item := range items { log.Printf(" %s = %s\n", item.Key, item.Value) } } // ======================================== // EJEMPLO 3: Interceptación de Red // ======================================== log.Println("\n=== EJEMPLO 3: Network Interception ===") // Bloquear imágenes y CSS para acelerar carga ni, err := b.BlockResourceTypes(ctx, "Image", "Stylesheet") if err != nil { log.Printf("Error: %v", err) } else { log.Println("Bloqueando imágenes y CSS...") defer ni.Disable(ctx) } // Navegar con recursos bloqueados log.Println("Navegando a página con recursos bloqueados...") b.Navigate(ctx, "https://news.ycombinator.com", nil) time.Sleep(2 * time.Second) // ======================================== // EJEMPLO 4: Headers Personalizados // ======================================== log.Println("\n=== EJEMPLO 4: Custom Headers ===") headers := map[string]string{ "X-Custom-Header": "MyValue", "Accept-Language": "en-US,en;q=0.9", } if err := b.SetExtraHTTPHeaders(ctx, headers); err != nil { log.Printf("Error: %v", err) } else { log.Println("Headers personalizados establecidos") } // ======================================== // EJEMPLO 5: Evaluación de JavaScript // ======================================== log.Println("\n=== EJEMPLO 5: JavaScript Evaluation ===") // Ejecutar script complejo script := ` (() => { const info = { url: window.location.href, title: document.title, links: document.querySelectorAll('a').length, images: document.querySelectorAll('img').length, userAgent: navigator.userAgent, webdriver: navigator.webdriver }; return info; })() ` result, err := b.Evaluate(ctx, script) if err != nil { log.Printf("Error: %v", err) } else { log.Printf("Resultado de evaluación:\n%+v\n", result.Value) } // ======================================== // EJEMPLO 6: Console Logging // ======================================== log.Println("\n=== EJEMPLO 6: Console Monitoring ===") b.EnableConsole(ctx) b.OnConsole(func(msg *browser.ConsoleMessage) { log.Printf("[CONSOLE.%s] %s\n", msg.Type, msg.Text) }) // Ejecutar código que genera logs de consola b.Evaluate(ctx, ` console.log("Mensaje de log"); console.warn("Mensaje de warning"); console.error("Mensaje de error"); `) time.Sleep(500 * time.Millisecond) // ======================================== // EJEMPLO 7: Formularios e Interacción // ======================================== log.Println("\n=== EJEMPLO 7: Form Interaction ===") // Navegar a una página con formulario b.Navigate(ctx, "https://httpbin.org/forms/post", nil) time.Sleep(2 * time.Second) // Llenar formulario log.Println("Llenando formulario...") // Focus y escribir en campo if err := b.Type(ctx, "input[name='custname']", "John Doe", nil); err != nil { log.Printf("Error: %v", err) } if err := b.Type(ctx, "input[name='custtel']", "555-1234", nil); err != nil { log.Printf("Error: %v", err) } // Esperar un poco antes de hacer click time.Sleep(500 * time.Millisecond) // Click en botón de submit log.Println("Haciendo click en submit...") if err := b.Click(ctx, "button[type='submit']"); err != nil { log.Printf("Error al hacer click: %v", err) } // Esperar navegación time.Sleep(3 * time.Second) // Obtener URL actual currentURL, _ := b.Evaluate(ctx, "window.location.href") log.Printf("URL después de submit: %v\n", currentURL.Value) // ======================================== // EJEMPLO 8: Esperar por Selector // ======================================== log.Println("\n=== EJEMPLO 8: Wait for Selector ===") b.Navigate(ctx, "https://example.com", nil) log.Println("Esperando a que aparezca el selector h1...") if err := b.WaitForSelector(ctx, "h1", 10*time.Second); err != nil { log.Printf("Error: %v", err) } else { log.Println("Selector encontrado!") text, _ := b.GetText(ctx, "h1") log.Printf("Texto: %s\n", text) } // ======================================== // EJEMPLO 9: Screenshot // ======================================== log.Println("\n=== EJEMPLO 9: Screenshots ===") // Screenshot de viewport screenshot, err := b.Screenshot(ctx, false) if err != nil { log.Printf("Error: %v", err) } else { log.Printf("Screenshot viewport: %d bytes\n", len(screenshot)) } // Screenshot de página completa fullScreenshot, err := b.Screenshot(ctx, true) if err != nil { log.Printf("Error: %v", err) } else { log.Printf("Screenshot completo: %d bytes\n", len(fullScreenshot)) } // ======================================== // EJEMPLO 10: Navegación del Historial // ======================================== log.Println("\n=== EJEMPLO 10: History Navigation ===") // Navegar a varias páginas b.Navigate(ctx, "https://example.com", nil) time.Sleep(1 * time.Second) b.Navigate(ctx, "https://example.org", nil) time.Sleep(1 * time.Second) // Ir atrás log.Println("Navegando hacia atrás...") if err := b.GoBack(ctx); err != nil { log.Printf("Error: %v", err) } else { time.Sleep(1 * time.Second) url, _ := b.Evaluate(ctx, "window.location.href") log.Printf("URL después de GoBack: %v\n", url.Value) } // Ir adelante log.Println("Navegando hacia adelante...") if err := b.GoForward(ctx); err != nil { log.Printf("Error: %v", err) } else { time.Sleep(1 * time.Second) url, _ := b.Evaluate(ctx, "window.location.href") log.Printf("URL después de GoForward: %v\n", url.Value) } log.Println("\n=== Todos los ejemplos completados ===") }