Dinoer

Die Operation dauert, und bis zum Ende sehen Sie nichts

Ein Import, eine Kopie, eine Massenänderung. Dinoer antwortet einmal, am Ende; ein Fehler nach dreißig Sekunden kostet Sie die ganze Wartezeit. Warum ein Zeitlimit kein Fehlschlag ist, und welche Einstellungen helfen.

Das Symptom. Sie starten etwas Langsames (einen Import, die Kopie einer Website, eine Massenänderung) und warten. Dinoer antwortet einmal, am Ende. In der Zwischenzeit zeigt die Oberfläche vielleicht eine Ladeanzeige, einen Fortschrittsbalken, Live-Protokolle: Nichts davon erreicht Sie vor dem Ende des Laufs.

Scheitert die Operation nach dreißig Sekunden, erfahren Sie es erst am Ende des Laufs, und jeder neue Versuch kostet wieder die ganze Dauer.

Warum das so ist

Ein Aufruf, eine abschließende Antwort, kein Datenstrom. Das macht einen Lauf reproduzierbar und seine Ausgabe zu einem einzigen JSON-Dokument, und genau das kostet Sie hier: Es gibt keinen Zwischenstand, den man abfragen könnte.

Auf ein Signal warten, nicht auf eine Dauer

Verwenden Sie pause nicht, um auf das Ende einer Operation zu warten.

Eine feste Pause passt sich nicht an. Auf zehn Sekunden gesetzt, liest sie eine Operation, die fünfzehn dauert, während diese noch läuft; eine, die zwei dauert, verschwendet bei jedem Versuch acht Sekunden. Keiner der beiden Fehler fällt auf.

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

Warten Sie, bis die Ladeanzeige verschwindet, dann, bis das Ergebnis erscheint. Das Szenario dauert dann genau so lange wie die Operation.

--timeout für eine langsame Operation erhöhen

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

--timeout (standardmäßig 10.000 ms) gilt für jede Playwright-Operation: Eine lange Aktion braucht meist deutlich mehr als den Standardwert. Für ein langes Szenario hält --checkpoint <Datei> die Sitzung und die Nummer der letzten erfolgreichen Aktion fest, damit ein neuer Lauf dort fortsetzt; die Datei wird gelöscht, wenn das Szenario erfolgreich endet.

Ein Zeitlimit ist kein Fehlschlag: erst prüfen, dann wiederholen

Ein Absenden, das das Zeitlimit überschreitet, kann gelungen sein. Der Server hört nicht auf, nur weil der Client nicht mehr wartet.

Ein Formular, das ohne JavaScript abgeschickt wird, hält die HTTP-Anfrage offen, bis der Server fertig ist. Dauert das länger als das Zeitlimit, endet der Klick mit TimeoutError, während die Operation weiterläuft und abgeschlossen wird. Wiederholen Sie sie „zur Sicherheit“, läuft sie zweimal.

Bevor Sie eine lange Operation wiederholen, die etwas ändert, sehen Sie sich das Ziel an. Ein TimeoutError bei einem Klick heißt, dass Playwright nicht mehr gewartet hat, sonst nichts.

Kurz gesagt

  • Dinoer antwortet einmal, am Ende; einen Zwischenstand gibt es nicht.
  • Warten Sie auf eine Veränderung der Seite, nie auf eine feste Dauer.
  • --timeout gilt für jede Playwright-Operation; erhöhen Sie es, wenn die Operation langsam ist. --checkpoint setzt ein langes Szenario fort.
  • Wiederholen Sie nie eine langsame Operation, die etwas ändert, ohne vorher das Ziel zu prüfen.