Die Seite lädt nie vollständig, egal welchen Timeout Sie einstellen
Zehn Sekunden: Fehler. Vierzigfünf Sekunden: Identischer Fehler. Das Ziel ist nicht langsam – es wird niemals fertiggestellt werden, und kein Timeout wird das ändern.
Das Symptom. TimeoutError beim ersten Navigationsversuch. Sie erhöhen
--timeout von 10 Sekunden auf 45 Sekunden. Es schlägt erneut fehl, und zwar genau auf die gleiche Weise.
Der identische Fehler ist die Diagnose: Dies ist kein Problem der Dauer.
Was Dinoer erwartet
Standardmäßig wird die Navigation bei networkidle abgeschlossen – nach 500 Millisekunden Netzwerk-
Stille. Das ist eine gute Standardeinstellung: das bedeutet, dass die Seite tatsächlich vollständig geladen wurde,
die Skripte ausgeführt wurden und der Inhalt angekommen ist.
Einige Ziele werden nie still. Ein Dashboard, das Zähler aktualisiert, ein Live-Statistikbereich, eine Router-Administrationsschnittstelle, die ihren eigenen Status abfragt – sie kommunizieren aus Designgründen ständig mit dem Netzwerk. Es gibt keinen Moment der Stille, auf den man warten könnte, daher wartet Dinoer jedes Mal, unabhängig von der Dauer, bis zum Timeout.
Ändern Sie die Bedingung, 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 wird abgeschlossen, wenn das eigene Ladeereignis der Seite ausgelöst wird, ohne dass eine Netzwerkverbindung erforderlich ist. Das gleiche Flag existiert in rpa.py und wird an kampagnenbasierte Eskalationen weitergegeben.
Ein Szenario kann dies als eine Stammeigenschaft enthalten, sodass es eigenständig bleibt – die Person, die Ihr Szenario wiederverwendet, muss nicht die Besonderheit des Ziels kennen:
{"url": "http://target.local/", "wait_until": "load", "actions": [...]}
Die Befehlszeilenoption gewinnt gegenüber dem Szenario. Im Gegensatz zu booleschen Optionen, die kombiniert werden können, überträgt diese Option einen Wert – und zwei Werte ergeben keine Summe. Wenn beide gesetzt sind, entscheidet das Flag.
Welchen Wert verwenden?
| Wert | Fertigstellung bei | Verwenden Sie es, wenn |
|---|---|---|
networkidle | 500 ms Netzwerk-Stillstand | Standard – beibehalten, außer bei Fehlern |
load | Ladeereignis der Seite | das Ziel kontinuierlich abfragt |
domcontentloaded | HTML geparst, Nebenressourcen ausstehend | Sie benötigen die frühestmögliche Anzeige |
Greifen Sie nicht vorsorglich zu load. Der Standardwert liefert Ihnen eine Seite, die vollständig angekommen ist; ihn zu ändern bedeutet, zu akzeptieren, dass beim Erzeugen der Antwort noch Inhalt unterwegs sein kann. Ändern Sie ihn, wenn der Standardwert versagt, nicht davor.
Wie unterscheidet man das von einer langsamen Seite?
Eine langsame Seite lädt schließlich, wenn man lange genug wartet – das Erhöhen des Timeout-Werts verändert das Ergebnis. Eine Seite, die niemals inaktiv ist, schlägt immer gleich, unabhängig von der Dauer.
Der Test ist also günstig: Führen Sie ihn zweimal aus, einmal mit den Standardeinstellungen und einmal mit einer viel größeren Timeout-Einstellung. Gleicher Fehler, gleiche Geschwindigkeit? Ändern Sie die Bedingung. Unterschiedliches Verhalten? Dann haben Sie ein normales, langsames Ziel, und das Timeout ist der richtige Parameter.
Kurz gesagt
- Gleiches Fehlverhalten bei 10 s und 45 s = falsche Bedingung, nicht falsche Dauer.
--wait-until loadfür Ziele, die kontinuierlich abfragen.- Fügen Sie es in das Szenario ein, damit es sich mit dem Ziel bewegt.
- Behalten Sie
networkidleüberall sonst bei.