3c250a9252
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>
101 lines
3.3 KiB
Markdown
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`
|