Dinoer

Hoja de referencia rápida

Cada comando, acción y código de salida en una sola página — la hoja de referencia del repositorio, copiada tal cual.

Versión 1.0.1 — septiembre de 2026

Todo en una página. Referencia completa: docs/MANUEL.md.


Tres comandos

# Ver una página: árbol de accesibilidad
/opt/dinoer/venv/bin/python /opt/dinoer/shot.py --url URL --a11y

# Ejecutar un escenario
/opt/dinoer/venv/bin/python /opt/dinoer/rpa.py --scenario FILE.json

# Leer una referencia de escenario y comparar (monitorización estructural)
/opt/dinoer/venv/bin/python /opt/dinoer/rpa.py \
  --scenario FILE.json --replay-verifier REF.json

La primera llamada en una máquina necesita --guide-version X.Y, que se obtiene con grep notice-version /opt/dinoer/docs/GUIDE_LLM.md.


El bucle

        usted decide qué hacer a continuación
                  │
                  ▼
   ┌──────────────────────────────┐
   │  shot.py / rpa.py            │   un proceso, un JSON en stdout
   │    ├─ Chromium (headless)    │
   │    ├─ A11y: estructura       │
   │    └─ secrets → formularios  │   nunca en el shell, nunca en un log
   └──────────────┬───────────────┘
                  │  boussole + JSON
                  ▼
        usted lee el mismo estado
        que el operador también puede ver

El estado de sesión vive en un archivo, no en el proceso: una segunda llamada con --reprendre-session reutiliza las cookies — nunca el estado del DOM.


Lea la salida en este orden

LeaLe indica
successi la ejecución se completó
boussole.url_courantedónde acabó realmente
boussole.dernier_code_httpúltimo estado de navegación
etat.pret_a_agir + etat.raisonsfricciones percibidas — un informe, nunca una barrera
a11y_treeestructura de la página — encabezados, campos, botones
respectsu propia huella: páginas, acciones, duración

Si boussole no coincide con lo que espera, deténgase antes de cualquier acción mutante.


Cada acción

type siempre es obligatorio. Las claves de abajo son las adicionales.

AcciónObligatorioOpcional
naviguerurl—
cliquerselecteurforce, repli_js
cliquer_iframeiframe_selecteur | iframe_chemin, selecteurforce
remplirselecteur, valeursecret_cle
remplir_iframeiframe_selecteur | iframe_chemin, selecteur, valeursecret_cle
evaluerscriptattendu | contient | motif
extraire_texte——
defilerpx | selecteur—
pausems—
attendreselecteur—
attendre_selecteur_presentselecteur—
attendre_absenceselecteurdelai_initial_ms
attendre_navigation——
attendre_urlmotifattendre_changement
attendre_reseau_calme—timeout_ms
attendre_mfa_ntfyselecteurtimeout
nettoyer_overlayselecteur—
declencher_scenarioscenario—

Credenciales — la única forma correcta

{"type": "remplir", "selecteur": "input[name=\"password\"]", "valeur": "depuis_secrets", "secret_cle": "password"}

No extraiga nunca un secreto al shell. lib/repertoire_chiffre.py lo resuelve dentro del proceso Playwright; el valor nunca llega a su línea de comandos, su historial, ni ningún log.


Cuando algo se resiste

SíntomaPruebe
El clic agota el tiempo, elemento visualmente oculto"force": true, luego "repli_js": true
Elemento fuera de la zona visibledefiler primero
La página nunca termina de cargar--wait-until load
El envío no hace nada, sin errorvalidación HTML nativa — envíe el formulario con evaluer
exit 42directorio cifrado no montado (dinoer-monter-secrets, o bash /opt/dinoer/scripts/monter-repertoire-chiffre.sh en una instalación por clon de Git), o checksum de credenciales inválido (revisa el archivo de credenciales) — ambos son SecretsFermesError
guide_non_lupasa --guide-version una vez
403 / 429lea respect.waf_bloquants — una señal, no una excepción

Códigos de salida

0 éxito · 1 fallo de ejecución o aserción fallida · 2 argumentos inválidos (rechazados antes de iniciar cualquier navegador) · 3 intérprete incorrecto — use el venv (/opt/dinoer/venv/bin/python) · 42 directorio cifrado de credenciales cerrado, o checksum de credenciales inválido (familia SecretsFermesError) · 43 ningún secrets_dir configurado (SecretsNonConfigureError).