Administering a web interface end to end
Driving an interface behind a sign-in, in several steps: what makes it work with Dinoer, and where it stops.
This is not the task Dinoer is built for, but its browser core still does it:
rpa.py drives an interface behind a sign-in, over several steps, as a person
would. Use it when the task is configuration rather than research.
Behind an HTTP Basic prompt
A target protected by a proxy’s own HTTP Basic authentication, on top of the application’s sign-in page:
{"http_credentials": true, "url": "https://target.local/admin", "actions": [...]}
The scenario still names no secret: http_credentials tells Dinoer to read
http_username and http_password from the credential file and to give them
to the browser for the target’s origin only.
What makes this case work
One call for anything that depends on the page state. Sign in, act, check, in a single call. Split across calls, the page state is lost without a warning: a saved session holds cookies and local storage only, never what was open on the screen.
A check at the top. If the page is not the expected one, stop before typing anything:
{"type": "evaluer", "script": "document.title", "contient": "Sign in"}
The encrypted directory for every credential.
{"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"}
The scenario can be committed, because it names keys, never values.
Signals read, not only the verdict. After each step: where you really are
(boussole.url_courante), what the server answered
(boussole.dernier_code_http), whether the session is signed in
(auth_status, with auth_indicator).
Where it stops
Operations that take minutes fit badly: the browser core returns one final answer, not a stream, and a timeout does not mean failure, since the server goes on working after the client stops waiting. Changing data on many independent sites is not what Dinoer is built for; use the target’s API if it has one. And nothing here can be undone: Dinoer runs the list you wrote, at machine speed.