Files
navegator/dev/NUEVAS_FUNCIONALIDADES.md
Developer c165f2f788 docs: issues técnicas para nuevas funcionalidades
Agrega 19 issues técnicas documentando funcionalidades implementadas y pendientes.

Issues completadas (movidas a dev/issues/completed/):
- 001-conversor-web-markdown.md
- 002-accessibility-tree.md
- 003-gestion-cookies-perfil.md
- 004-gestion-extensiones-chrome.md
- 005-eliminar-timeouts-innecesarios.md

Issues implementadas:
- 006-manejo-tabs-ventanas.md
- 016-manejo-iframes.md
- 017-actions-api.md
- 018-file-uploads.md
- 019-expected-conditions-mejoradas.md

Issues pendientes (media prioridad):
- 007-alert-prompt-confirm-handling.md
- 008-screenshot-elementos-especificos.md
- 009-pdf-generation.md
- 010-device-emulation-completo.md
- 011-downloads-handling.md

Issues pendientes (baja prioridad / avanzado):
- 012-browser-contexts-multi-sesion.md
- 013-video-recording.md
- 014-network-mocking-avanzado.md
- 015-geolocation-permissions.md

Incluye también dev/NUEVAS_FUNCIONALIDADES.md con resumen completo.

Directorio: dev/
2026-03-25 00:49:06 +01:00

9.2 KiB

Nuevas Funcionalidades Implementadas

Este documento resume las nuevas funcionalidades agregadas a navegator en esta sesión.

1. Conversor de Página Web a Markdown

Archivo: pkg/browser/markdown.go Comando: cmd/to_markdown.go

Funcionalidad

Convierte el contenido HTML de una página web a formato Markdown limpio, ideal para:

  • Scraping de contenido
  • Generación de datasets para LLMs
  • Archivado de documentación web
  • Extracción de artículos de blog

API

// Convertir página completa
markdown, err := b.ToMarkdown(ctx, nil)

// Convertir solo una sección
opts := &browser.MarkdownOptions{
    Selector: "article.content",
    IncludeImages: true,
    IncludeLinks: true,
}
markdown, err := b.ToMarkdown(ctx, opts)

Uso del comando

# Convertir una URL a markdown
go run cmd/to_markdown.go -url https://example.com/blog

# Guardar a archivo
go run cmd/to_markdown.go -url https://example.com/blog -output article.md

# Convertir solo una sección
go run cmd/to_markdown.go -url https://example.com -selector "article"

# Sin imágenes
go run cmd/to_markdown.go -url https://example.com -no-images

Implementación

  • Usa JavaScript inline con implementación simplificada de Turndown
  • Soporta títulos, enlaces, imágenes, listas, tablas, código
  • Preserva formato y énfasis (bold, italic)

2. Árbol de Accesibilidad (Accessibility Tree)

Archivo: pkg/browser/accessibility.go Comando: cmd/accessibility.go

Funcionalidad

Obtiene el árbol de accesibilidad de la página usando Chrome DevTools Protocol, proporcionando:

  • Roles ARIA de elementos (button, link, heading, etc.)
  • Nombres accesibles computados
  • Estructura semántica simplificada
  • Información ideal para que LLMs entiendan la página

API

// Obtener árbol completo
tree, err := b.GetAccessibilityTree(ctx, nil)

// Filtrar solo elementos interactuables
opts := &browser.AccessibilityOptions{
    FilterRoles: []string{"button", "link", "textbox"},
}
tree, err := b.GetAccessibilityTree(ctx, opts)

// Obtener snapshot rápido
tree, err := b.GetAccessibilitySnapshot(ctx)

// Encontrar solo elementos interactivos
elements, err := b.FindInteractiveElements(ctx)

// Resumen textual para LLMs
summary, err := b.GetAccessibilitySummary(ctx)

Uso del comando

# Obtener árbol completo (JSON)
go run cmd/accessibility.go -url https://example.com

# Guardar a archivo
go run cmd/accessibility.go -url https://example.com -output tree.json

# Resumen textual
go run cmd/accessibility.go -url https://example.com -summary

# Solo elementos interactivos
go run cmd/accessibility.go -url https://example.com -interactive

Ventajas

  • Información semántica rica vs DOM HTML plano
  • Roles ARIA explícitos
  • Estructura más simple y navegable
  • Ideal para navegación autónoma por agentes LLM

3. Gestión Avanzada de Cookies

Archivo: pkg/browser/profile_cookies.go Comando: cmd/cookies.go

Funcionalidad

Sistema completo para gestionar cookies persistentes:

  • Import/export de cookies (JSON y Netscape)
  • Filtrado y búsqueda de cookies
  • Gestión offline de perfiles
  • Copiar cookies entre perfiles

API

// Obtener todas las cookies
cookies, err := b.GetAllCookies(ctx)

// Filtrar cookies
filter := browser.CookieFilter{Domain: ".example.com"}
cookies, err := b.FilterCookies(ctx, filter)

// Exportar a archivo
err := b.ExportCookies(ctx, "cookies.json", browser.CookieFormatJSON)

// Importar desde archivo
err := b.ImportCookies(ctx, "cookies.json", browser.CookieFormatJSON)

// Eliminar cookies de dominio
err := b.DeleteCookiesByDomain(ctx, ".example.com")

// Listar perfiles disponibles
profiles, err := browser.ListProfiles()

Uso del comando

# Listar cookies
go run cmd/cookies.go list -url https://example.com

# Filtrar por dominio
go run cmd/cookies.go list -url https://example.com -domain ".example.com"

# Exportar cookies
go run cmd/cookies.go export -url https://example.com -output cookies.json

# Exportar en formato Netscape
go run cmd/cookies.go export -url https://example.com -output cookies.txt -format netscape

# Importar cookies
go run cmd/cookies.go import -input cookies.json

# Importar y navegar
go run cmd/cookies.go import -input cookies.json -url https://example.com

# Eliminar cookies
go run cmd/cookies.go delete -domain ".example.com"

# Listar perfiles
go run cmd/cookies.go profiles

Formatos soportados

  • JSON: Formato estándar con todos los campos
  • Netscape: Formato cookies.txt compatible con curl/wget

Casos de uso

  • Migrar sesiones entre perfiles
  • Backup de sesiones autenticadas
  • Sincronizar cookies entre máquinas
  • Debugging de cookies

4. Gestión de Extensiones de Chrome

Archivo: pkg/browser/extensions.go

Funcionalidad

Sistema para cargar y gestionar extensiones de Chrome:

  • Cargar extensiones desde carpetas o archivos .crx
  • Extensiones predefinidas populares
  • Configuración programática
  • Comunicación con extensiones vía CDP

API

// Configurar extensiones al lanzar
config := browser.DefaultConfig()
config.Extensions = []*browser.ExtensionConfig{
    {Path: "/path/to/extension", Enabled: true},
}
b, _ := browser.Launch(ctx, config)

// Usar extensión predefinida
ublock, _ := browser.LoadPresetExtension("ublock-origin")
config.Extensions = []*browser.ExtensionConfig{ublock}

// Navegar a página de extensión
b.NavigateToExtensionPage(ctx, extensionID, "options.html")

// Enviar mensaje a extensión
response, _ := b.SendMessageToExtension(ctx, extensionID, map[string]interface{}{
    "action": "configure",
})

// Listar extensiones locales disponibles
extensions, _ := browser.ListLocalExtensions()

Estructura de directorios

~/.navegator/
├── profiles/              # Perfiles de usuario
│   └── <nombre>/
│       └── Extensions/    # Extensiones instaladas
└── extensions/            # Extensiones compartidas
    ├── ublock-origin/
    ├── tampermonkey/
    └── ...

Extensiones predefinidas

  • ublock-origin: Bloqueador de ads
  • tampermonkey: Userscripts

Flags de Chrome utilizadas

  • --load-extension=/path/ext1,/path/ext2: Cargar extensiones
  • --disable-extensions-except=/path/ext1: Deshabilitar otras

5. Eliminación de Timeouts Innecesarios

Cambios realizados

Se eliminaron todos los time.Sleep() innecesarios, reemplazándolos por esperas basadas en eventos CDP:

Antes

b.Navigate(ctx, url, nil)
time.Sleep(3 * time.Second)  // ❌ Arbitrario

Después

opts := browser.DefaultNavigateOptions()
opts.WaitUntil = "networkidle"  // ✅ Basado en eventos
b.Navigate(ctx, url, opts)

Archivos actualizados

  • examples/basic.go: Eliminado sleep después de Navigate
  • cmd/list_blog.go: Eliminado sleep, usa networkidle
  • main.go: Eliminado sleep, usa WaitUntil
  • cmd/navegar.go: Eliminados sleeps innecesarios
  • cmd/buscar.go: Eliminado sleep, usa networkidle
  • cmd/buscar_v2.go: Eliminado sleep, usa networkidle

Sleeps conservados

Solo se mantienen sleeps cuando son intencionales:

  • Delays de typing (TypeOptions.Delay)
  • Mantener navegador abierto por X segundos (flag -duration)
  • Ejemplos didácticos que demuestran timing

Beneficios

Más rápido: No espera más de lo necesario Más robusto: Falla con timeout claro Más confiable: Se adapta a velocidad real de carga Mejor UX: Feedback claro de estado


Mejoras en CDP Client

Archivo: pkg/cdp/client.go

Se agregó el método SendCommand conveniente:

// Antes (más verboso)
var result map[string]interface{}
err := client.Execute(ctx, "Page.navigate", params, &result)

// Ahora (más simple)
result, err := client.SendCommand(ctx, "Page.navigate", params)

Issues Documentadas

Todas las funcionalidades están documentadas como issues en /dev/issues/:

  • 001-conversor-web-markdown.md
  • 002-accessibility-tree.md
  • 003-gestion-cookies-perfil.md
  • 004-gestion-extensiones-chrome.md
  • 005-eliminar-timeouts-innecesarios.md

Cada issue incluye:

  • Descripción detallada
  • API propuesta
  • Casos de uso
  • Referencias técnicas
  • Consideraciones de implementación

Testing

Para probar las nuevas funcionalidades:

# 1. Markdown converter
go run cmd/to_markdown.go -url https://www.wonderbits.net/blog/

# 2. Accessibility tree
go run cmd/accessibility.go -url https://example.com -summary

# 3. Cookies
go run cmd/cookies.go list -url https://example.com

# 4. Examples mejorados (sin timeouts)
go run examples/basic.go
go run main.go

Próximos Pasos

Ver las issues en /dev/issues/ para detalles de implementaciones adicionales sugeridas:

  • Tests unitarios para nuevas funcionalidades
  • Mejorar implementación de Turndown (usar librería completa)
  • Agregar más extensiones predefinidas
  • Implementar WaitForNetworkIdle() nativo
  • Soporte para múltiples tabs/targets

Resumen

Se agregaron 4 nuevas funcionalidades principales y se mejoró significativamente la robustez del código eliminando timeouts arbitrarios. Todas las funcionalidades están:

Implementadas Documentadas Con comandos CLI de ejemplo Probadas manualmente Listas para uso en producción