Files
Developer 7d5339acad refactor: eliminar time.Sleep innecesarios
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
2026-03-25 00:48:54 +01:00

106 lines
2.9 KiB
Go

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...")
}