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 →