7d5339acad
Reemplaza todos los time.Sleep arbitrarios por esperas basadas en eventos CDP. Cambios: - examples/basic.go: usa WaitUntil en Navigate - cmd/navegar.go: elimina sleeps después de acciones - cmd/buscar.go y buscar_v2.go: usa networkidle - cmd/list_blog.go: elimina sleep innecesario - main.go: usa WaitUntil load Mejora performance y robustez al no esperar más de lo necesario. Archivos: examples/basic.go, cmd/*.go, main.go
90 lines
2.2 KiB
Go
90 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
|
|
"navegator/pkg/browser"
|
|
)
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
|
|
// Crear configuración con perfil personalizado
|
|
config := browser.DefaultConfig()
|
|
config.ProfileName = "my-agent-profile"
|
|
|
|
// Si quieres modo visible, desactiva headless
|
|
// config.StealthFlags.Headless = false
|
|
|
|
// Lanzar navegador
|
|
log.Println("Lanzando navegador...")
|
|
b, err := browser.Launch(ctx, config)
|
|
if err != nil {
|
|
log.Fatalf("Error al lanzar navegador: %v", err)
|
|
}
|
|
defer b.Close()
|
|
|
|
log.Printf("Navegador iniciado. Perfil: %s\n", b.ProfilePath())
|
|
log.Printf("Debug URL: %s\n", b.DebugURL())
|
|
|
|
// Navegar a una página
|
|
log.Println("Navegando a example.com...")
|
|
opts := browser.DefaultNavigateOptions()
|
|
opts.WaitUntil = "load" // Esperar evento de carga completa
|
|
if err := b.Navigate(ctx, "https://example.com", opts); err != nil {
|
|
log.Fatalf("Error al navegar: %v", err)
|
|
}
|
|
|
|
// Obtener HTML
|
|
log.Println("Obteniendo HTML...")
|
|
html, err := b.GetHTML(ctx, "")
|
|
if err != nil {
|
|
log.Fatalf("Error al obtener HTML: %v", err)
|
|
}
|
|
log.Printf("HTML length: %d bytes\n", len(html))
|
|
|
|
// Obtener texto del h1
|
|
log.Println("Obteniendo texto del h1...")
|
|
text, err := b.GetText(ctx, "h1")
|
|
if err != nil {
|
|
log.Fatalf("Error al obtener texto: %v", err)
|
|
}
|
|
log.Printf("H1 text: %s\n", text)
|
|
|
|
// Tomar screenshot
|
|
log.Println("Tomando screenshot...")
|
|
screenshot, err := b.Screenshot(ctx, false)
|
|
if err != nil {
|
|
log.Fatalf("Error al tomar screenshot: %v", err)
|
|
}
|
|
|
|
if err := os.WriteFile("screenshot.png", screenshot, 0644); err != nil {
|
|
log.Fatalf("Error al guardar screenshot: %v", err)
|
|
}
|
|
log.Println("Screenshot guardado en screenshot.png")
|
|
|
|
// Ejecutar JavaScript
|
|
log.Println("Ejecutando JavaScript...")
|
|
result, err := b.Evaluate(ctx, "window.location.href")
|
|
if err != nil {
|
|
log.Fatalf("Error al ejecutar JavaScript: %v", err)
|
|
}
|
|
log.Printf("Current URL: %v\n", result.Value)
|
|
|
|
// Cookies
|
|
log.Println("Obteniendo cookies...")
|
|
cookies, err := b.GetCookies(ctx)
|
|
if err != nil {
|
|
log.Fatalf("Error al obtener cookies: %v", err)
|
|
}
|
|
log.Printf("Cookies encontradas: %d\n", len(cookies))
|
|
|
|
for _, cookie := range cookies {
|
|
log.Printf(" - %s = %s\n", cookie.Name, cookie.Value)
|
|
}
|
|
|
|
log.Println("Ejemplo completado exitosamente!")
|
|
}
|