Dinoer

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

WertEndet beiEinsetzen, wenn
networkidle500 ms ohne NetzverkehrStandard: behalten, solange er nicht scheitert
loaddem load-Ereignis der Seitedas Ziel den Server ständig abfragt
domcontentloadedgeparstem HTML, weitere Ressourcen laden nochSie 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 load für Ziele, die ständig abfragen.
  • Schreiben Sie es ins Szenario, damit es mit dem Ziel mitwandert.
  • Behalten Sie networkidle überall sonst.