Files
fn_registry/apps/script_navegador/app.md
T
egutierrez 3c250a9252 feat: app script_navegador y dashboard Metabase
App Go para ejecutar scripts de navegación automatizada usando las
funciones CDP del registry. Incluye script de creación de dashboard
en Metabase para monitoreo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 14:24:39 +02:00

101 lines
3.3 KiB
Markdown

---
name: script_navegador
lang: go
domain: infra
description: "Ejecutor de scripts de navegador CDP sobre Chrome. Lee pasos desde YAML y los ejecuta en secuencia registrando cada resultado en operations.db."
tags: [cdp, chrome, browser, automation, yaml]
uses_functions:
- chrome_launch_go_infra
- cdp_connect_go_infra
- cdp_navigate_go_infra
- cdp_click_go_infra
- cdp_type_text_go_infra
- cdp_wait_element_go_infra
- cdp_evaluate_go_infra
- cdp_get_html_go_infra
- cdp_screenshot_go_infra
- cdp_close_go_infra
uses_types: []
framework: ""
entry_point: "main.go"
dir_path: "apps/script_navegador"
---
## Descripcion
CLI Go que lee un archivo YAML con pasos de navegacion CDP y los ejecuta sobre Chrome, registrando cada paso y su resultado en `operations.db`.
## Uso
```bash
# Conectarse a Chrome ya corriendo en puerto 9222
go run . --script examples/busqueda_google.yaml
# Lanzar Chrome nuevo (headless)
go run . --script examples/busqueda_google.yaml --launch --headless
# Puerto personalizado
go run . --script examples/busqueda_google.yaml --port 9333
```
## Formato del script YAML
```yaml
name: "nombre_del_script"
steps:
- action: navigate
url: "https://ejemplo.com"
- action: wait
selector: "#elemento"
timeout_ms: 5000 # opcional, default 10000
- action: click
selector: "#boton"
continue_on_error: true # opcional, default false
- action: type
selector: "input[name=q]" # hace click primero para enfocar
text: "texto a escribir"
- action: screenshot
path: "/tmp/captura.png"
full_page: false # opcional, default false
- action: evaluate
expr: "document.title"
- action: get_html
# sin parametros adicionales
- action: sleep
ms: 500 # pausa en milisegundos
```
## Acciones soportadas
| Accion | Parametros obligatorios | Parametros opcionales |
|-------------|-------------------------|-------------------------------|
| `navigate` | `url` | |
| `wait` | `selector` | `timeout_ms` (default 10000) |
| `click` | `selector` | `continue_on_error` |
| `type` | `selector`, `text` | `continue_on_error` |
| `screenshot`| `path` | `full_page`, `continue_on_error` |
| `evaluate` | `expr` | `continue_on_error` |
| `get_html` | — | `continue_on_error` |
| `sleep` | `ms` | |
## Registro en operations.db
- **Entity `script_run`**: una por ejecucion del script, con metadata del script y resultado final
- **Execution**: una por ejecucion, con `pipeline_id = "script_navegador"`, duration_ms, records_in=pasos totales, records_out=pasos exitosos
- **Logs**: un log por cada paso ejecutado con nivel info/error
## Notas
- Si Chrome no esta corriendo y no se pasa `--launch`, la conexion falla con error claro
- `continue_on_error: true` por paso permite continuar aunque ese paso falle
- Flag global `--abort-on-error` (default false) aborta todo el script al primer error
- Al terminar (exito o error), siempre se ejecuta `cdp_close` para limpiar recursos
- operations.db se inicializa automaticamente si no existe usando `fn ops init`