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
pausenicht, 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.
--timeoutgilt für jede Playwright-Operation; erhöhen Sie es, wenn die Operation langsam ist.--checkpointsetzt ein langes Szenario fort.- Wiederholen Sie nie eine langsame Operation, die etwas ändert, ohne vorher das Ziel zu prüfen.