Dinoer

The operation takes a while, and you see nothing until it ends

An import, a copy, a bulk update. Dinoer answers once, at the end, so a failure after thirty seconds costs you the whole wait. Why a timeout is not a failure, and the settings that help.

The symptom. You start something slow (an import, a copy of a site, a bulk update) and wait. Dinoer answers once, at the end. Meanwhile the interface may show a spinner, a progress bar, live logs: none of it reaches you before the run finishes.

If the operation fails after thirty seconds, you find out when the run ends, and each new attempt costs the whole duration again.

Why it works this way

One call, one final answer, not a stream. That is what makes a run reproducible and its output a single JSON document, and it is what costs you here: there is no intermediate state to ask for.

Wait for a signal, not for a duration

Do not use pause to wait for an operation to finish.

A fixed pause cannot adapt. Set it to ten seconds and an operation that takes fifteen is read while it is still running; one that takes two wastes eight seconds on every attempt. Neither mistake shows.

[
  {"type": "cliquer", "selecteur": "#start-clone"},
  {"type": "attendre_absence", "selecteur": ".spinner"},
  {"type": "attendre_selecteur_present", "selecteur": ".result-container"},
  {"type": "extraire_texte"}
]

Wait for the spinner to go, then for the result to appear. The scenario then lasts exactly as long as the operation.

Raise --timeout for a slow operation

/opt/dinoer/venv/bin/python3 /opt/dinoer/rpa.py \
  --scenario clone.json --timeout 300000 --guide-version 1.6

--timeout (10,000 ms by default) applies to each Playwright operation: a long action usually needs it well above the default. For a long scenario, --checkpoint <file> records the session and the index of the last action that succeeded, so that a new run resumes from there; the file is deleted when the scenario ends successfully.

A timeout is not a failure: check before retrying

A submission that exceeds the timeout may have succeeded. The server does not stop because the client stopped waiting.

A form submission without JavaScript keeps the HTTP request open until the server has finished. If that takes longer than the timeout, the click ends in TimeoutError while the operation goes on and completes. Run it again “to be sure”, and it runs twice.

Before retrying a long operation that changes something, look at the target. A TimeoutError on a click means that Playwright stopped waiting, nothing more.

In short

  • Dinoer answers once, at the end; there is no intermediate state to ask for.
  • Wait for a change in the page, never for a fixed duration.
  • --timeout applies to each Playwright operation; raise it when the operation is slow. --checkpoint resumes a long scenario.
  • Never retry a slow operation that changes something without checking the target first.