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>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"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...")
|
||||
if err := b.Navigate(ctx, "https://example.com", nil); err != nil {
|
||||
log.Fatalf("Error al navegar: %v", err)
|
||||
}
|
||||
|
||||
// Esperar un poco para que cargue
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
// 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!")
|
||||
}
|
||||
Reference in New Issue
Block a user