package main import ( "context" "flag" "fmt" "log" "os" "navegator/pkg/browser" ) func main() { urlFlag := flag.String("url", "", "URL to analyze") outputFlag := flag.String("output", "", "Output file for JSON (optional)") summaryFlag := flag.Bool("summary", false, "Show text summary instead of full tree") interactiveFlag := flag.Bool("interactive", false, "Show only interactive elements") flag.Parse() if *urlFlag == "" { log.Fatal("Usage: accessibility -url [-output ] [-summary] [-interactive]") } ctx := context.Background() // Configurar navegador config := browser.DefaultConfig() config.ProfileName = "accessibility-inspector" config.StealthFlags.Headless = true // Lanzar navegador log.Println("Launching browser...") b, err := browser.Launch(ctx, config) if err != nil { log.Fatalf("Error launching browser: %v", err) } defer b.Close() // Navegar a URL log.Printf("Navigating to %s...\n", *urlFlag) opts := browser.DefaultNavigateOptions() opts.WaitUntil = "load" if err := b.Navigate(ctx, *urlFlag, opts); err != nil { log.Printf("Warning: navigation error: %v\n", err) } if *summaryFlag { // Mostrar resumen textual log.Println("Generating accessibility summary...") summary, err := b.GetAccessibilitySummary(ctx) if err != nil { log.Fatalf("Error getting summary: %v", err) } if *outputFlag != "" { if err := os.WriteFile(*outputFlag, []byte(summary), 0644); err != nil { log.Fatalf("Error writing to file: %v", err) } log.Printf("Summary saved to %s\n", *outputFlag) } else { fmt.Println(summary) } } else if *interactiveFlag { // Mostrar solo elementos interactivos log.Println("Finding interactive elements...") elements, err := b.FindInteractiveElements(ctx) if err != nil { log.Fatalf("Error finding interactive elements: %v", err) } fmt.Printf("\n=== Interactive Elements (%d) ===\n\n", len(elements)) for i, elem := range elements { fmt.Printf("%d. [%s] %s\n", i+1, elem.Role, elem.Name) if elem.Description != "" { fmt.Printf(" Description: %s\n", elem.Description) } if elem.Value != nil { fmt.Printf(" Value: %v\n", elem.Value) } fmt.Println() } if *outputFlag != "" { tree := &browser.AXTree{Nodes: elements} json, _ := tree.ToJSON() if err := os.WriteFile(*outputFlag, []byte(json), 0644); err != nil { log.Fatalf("Error writing to file: %v", err) } log.Printf("Interactive elements saved to %s\n", *outputFlag) } } else { // Obtener árbol completo log.Println("Getting accessibility tree...") tree, err := b.GetAccessibilityTree(ctx, nil) if err != nil { log.Fatalf("Error getting accessibility tree: %v", err) } fmt.Printf("\n=== Accessibility Tree (%d nodes) ===\n\n", len(tree.Nodes)) // Convertir a JSON jsonOutput, err := tree.ToJSON() if err != nil { log.Fatalf("Error converting to JSON: %v", err) } if *outputFlag != "" { if err := os.WriteFile(*outputFlag, []byte(jsonOutput), 0644); err != nil { log.Fatalf("Error writing to file: %v", err) } log.Printf("Accessibility tree saved to %s\n", *outputFlag) } else { fmt.Println(jsonOutput) } } }