Die Seite lädt nie fertig, egal welches Zeitlimit Sie setzen
Zehn Sekunden scheitern. Fünfundvierzig Sekunden scheitern genauso. Das Ziel ist nicht langsam: Es wird nie fertig, und daran ändert kein Zeitlimit etwas.
Das Symptom. TimeoutError bei der ersten Navigation. Sie erhöhen
--timeout von 10 s auf 45 s, und es scheitert erneut, genau gleich.
Dieses gleiche Scheitern ist die Diagnose: Das Problem ist nicht die Dauer.
Worauf Dinoer wartet
Standardmäßig endet die erste Navigation bei networkidle: 500 ms ohne
Netzverkehr. Das ist eine gute Voreinstellung, denn sie bedeutet, dass sich
die Seite wirklich beruhigt hat: Die Skripte sind gelaufen, der Inhalt ist
da.
Manche Ziele kommen nie zur Ruhe. Ein Dashboard, das seine Zähler aktualisiert, eine Live-Statistik, die Verwaltungsseite eines Routers, die ihren eigenen Status abfragt: Sie nutzen das Netz ständig, so sind sie gebaut. Es gibt keinen ruhigen Moment, auf den man warten könnte, also wartet Dinoer jedes Mal bis zum Zeitlimit, wie lang es auch sei.
Die Bedingung ändern, nicht die Dauer
/opt/dinoer/venv/bin/python3 /opt/dinoer/shot.py \
--url http://target.local/ --wait-until load --a11y \
--guide-version 1.6
--wait-until load endet, wenn das load-Ereignis der Seite ausgelöst wird,
ohne Netzstille zu verlangen. Dieselbe Option gibt es bei rpa.py. Sie gilt
nur für die erste Navigation, nicht für naviguer-Aktionen, und die von
campagne.py gestarteten Eskalationen behalten die Voreinstellung.
Ein Szenario kann sie als Eigenschaft auf oberster Ebene tragen, damit, wer es wiederverwendet, die Eigenheit des Ziels nicht kennen muss:
{"url": "http://target.local/", "wait_until": "load", "actions": [...]}
Die Befehlszeile hat Vorrang vor dem Szenario Diese Option trägt einen Wert, und zwei Werte lassen sich nicht kombinieren. Sind beide gesetzt, entscheidet die Option der Befehlszeile.
Welcher Wert
| Wert | Endet bei | Einsetzen, wenn |
|---|---|---|
networkidle | 500 ms ohne Netzverkehr | Standard: behalten, solange er nicht scheitert |
load | dem load-Ereignis der Seite | das Ziel den Server ständig abfragt |
domcontentloaded | geparstem HTML, weitere Ressourcen laden noch | Sie die frühestmögliche Sicht brauchen |
Wechseln Sie nicht vorsorglich zu load. Die Voreinstellung liefert eine
Seite, die vollständig angekommen ist; sie zu ändern heißt hinzunehmen, dass
ein Teil des Inhalts noch lädt, wenn die Antwort entsteht. Ändern Sie sie,
wenn die Voreinstellung scheitert.
Wie man sie von einer langsamen Seite unterscheidet
Eine langsame Seite gelingt, wenn man lange genug wartet: Ein höheres Zeitlimit ändert das Ergebnis. Eine Seite, die nie zur Ruhe kommt, scheitert bei jeder Dauer gleich.
Der Test kostet fast nichts: einmal mit dem Standard-Zeitlimit, einmal mit einem viel größeren. Gleicher Fehler, gleiche Geschwindigkeit? Ändern Sie die Bedingung. Anderes Verhalten? Sie haben ein gewöhnliches langsames Ziel, und das Zeitlimit ist die richtige Einstellung.
Kurz gesagt
- Derselbe Fehler bei 10 s und bei 45 s bedeutet die falsche Bedingung, nicht die falsche Dauer.
--wait-until loadfür Ziele, die ständig abfragen.- Schreiben Sie es ins Szenario, damit es mit dem Ziel mitwandert.
- Behalten Sie
networkidleüberall sonst.