--- 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`