Dinoer

Scenario gallery

The four example scenarios shipped with Dinoer: what each does, the command, and the output of a real run on 14 August 2026.

A scenario is a JSON file: a start address and a list of actions, in order. It is the unit of work of the browser core.

These four ship in scenarios/. The first three run on a fresh installation, without configuration; the fourth needs an encrypted directory.

1 · Read without changing anything

scenarios/exemples/sondage_fast.json waits for the page, then reads its title. Nothing on the target changes.

{"url": "https://example.com",
 "actions": [
   {"type": "attendre_selecteur_present", "selecteur": "body"},
   {"type": "evaluer", "script": "document.title"}]}
/opt/dinoer/venv/bin/python3 /opt/dinoer/rpa.py \
  --scenario scenarios/exemples/sondage_fast.json --guide-version 1.6
{"succes": true, "http_status": 200,
 "evaluations": [{"script": "document.title", "valeur": "Example Domain"}],
 "respect": {"actions_executees": 2, "duree_totale_ms": 2762}}

Two actions, 2.8 seconds. The shape to use when you only need to know what a page says.

2 · Map a page before changing it

scenarios/diagnostic_dom.json lists the buttons and inputs of a page, detects whether React, Vue or Angular is running, and looks for shadow roots, without changing anything. Write a scenario that acts on the page from its output, not from memory.

/opt/dinoer/venv/bin/python3 /opt/dinoer/rpa.py \
  --scenario scenarios/diagnostic_dom.json --guide-version 1.6
{"succes": true, "http_status": 200,
 "evaluations": [
   {"script": "…querySelectorAll('button')…", "valeur": "[]"},
   {"script": "…React/Vue/Angular…",
    "valeur": "{\"React\":false,\"Vue\":false,\"Angular\":false}"}],
 "respect": {"actions_executees": 6, "duree_totale_ms": 5933}}

The lists are empty because example.com has neither buttons nor inputs. On a real target they give the selectors and attributes for the next scenario.

3 · Diagnose a page that misbehaves

scenarios/exemples/depannage_local.json has the same actions as the first scenario, for another purpose: point it at an interface under development (--url replaces the address in the file) and read erreurs_js and erreurs_console, present in every answer and empty when nothing went wrong. A blank page with a silent HTTP 500 behind it looks like an expired session; the console tells them apart.

/opt/dinoer/venv/bin/python3 /opt/dinoer/rpa.py \
  --scenario scenarios/exemples/depannage_local.json \
  --url http://localhost:8000/ --guide-version 1.6

4 · Sign in from the encrypted directory

scenarios/exemples/rpa_securise.json needs a mounted, configured encrypted directory, so no output is shown here.

{"auth_indicator": ".user-menu",
 "url": "https://example.com/login",
 "actions": [
   {"type": "evaluer", "script": "document.title", "contient": "Example"},
   {"type": "remplir", "selecteur": "input[name=\"username\"]",
    "valeur": "depuis_secrets", "secret_cle": "username"},
   {"type": "remplir", "selecteur": "input[name=\"password\"]",
    "valeur": "depuis_secrets", "secret_cle": "password"},
   {"type": "cliquer", "selecteur": "button[type=\"submit\"]"},
   {"type": "attendre_selecteur_present", "selecteur": ".user-menu"}]}

"valeur": "depuis_secrets" means that the password is read inside the browser process, never in your shell. The first action is a check: if the page title does not contain “Example”, the scenario stops before typing anything.

Your own scenarios

Write them from a page you have read first. Writing a scenario →