Was ein Agent nicht erraten kann
„Der Klick war erfolgreich“ stimmt und sagt fast nichts. Wo ein Lauf, der funktioniert hat, und ein eingetretenes Ergebnis auseinandergehen, und die Signale, mit denen Dinoer beides unterscheiden lässt.
Ein Agent, der den Browserkern steuert, weiß eines sicher: ob seine eigene
Anweisung ausgeführt wurde. Er hat geklickt, der Klick hat stattgefunden,
succes: true.
Das verträgt sich mit einem Server, der nichts erhalten hat, einem abgelehnten Formular, einer abgelaufenen Sitzung oder einer Seite, die von Anfang an die falsche war.
Drei Arten, wie ein Erfolg kein Ergebnis ist
Der Browser hat das Formular nicht abgeschickt. Ein required-Feld war
leer, und die HTML5-Validierung hat das Absenden blockiert. Der Klick fand
statt; nichts wurde gesendet.
Der Klick war synthetisch. Ein JavaScript-.click() auf eine
Absende-Schaltfläche löst das Klick-Ereignis aus, ohne zu garantieren, dass
das Formular gesendet wird.
Die Seite war nicht die erwartete. Eine Weiterleitung führte woandershin, als das Szenario annahm, und der Klick traf eine Seite, die niemand anfassen wollte.
In allen drei Fällen kann die eigene Ausgabe des Agenten es ihm nicht sagen. Das Formular, das nie abgeschickt wird →
Zeit ist unsichtbar
Eine Seite kann vollständig geladen und trotzdem noch nicht bereit sein.
Nach dem Absenden eines Anmeldeformulars kommt das Netz zur Ruhe und die Navigation endet. Der Agent schließt daraus, dass die Sitzung besteht, ruft eine geschützte Seite auf und landet wieder auf der Anmeldeseite.
Viele Anwendungen erzeugen die Sitzungskennung direkt nach der Anmeldung neu: Der Browser ist fertig, der Server nicht, und nichts auf der Seite unterscheidet „ruhig, weil fertig“ von „ruhig zwischen zwei Zuständen“. Es gibt kein Signal, auf das man warten könnte; das ist der einzige Fall, in dem eine feste Pause das richtige Werkzeug ist:
{"type": "cliquer", "selecteur": "button[type=\"submit\"]"},
{"type": "pause", "ms": 2000},
{"type": "naviguer", "url": "https://target.local/protected"}
Was Dinoer dagegen tut
Es kann die Lücke nicht schließen: Kein Werkzeug kann das aus dem Browser heraus. Es liefert Signale, die eine falsche Annahme sichtbar machen.
Wo Sie sind. boussole enthält die URL nach Weiterleitungen, den
Seitentitel und den letzten HTTP-Status.
Sitzungsabweichung. Nach --reprendre-session erscheint
boussole.session_derive, wenn die Seite, auf der Sie gelandet sind, von der
abweicht, auf der die Sitzung gespeichert wurde. dernier_code_http trennt
dann zwei Fehler, die gleich aussehen: Ein echter Ablauf leitet weiter
(302), ein Anwendungsfehler liefert 500 und dieselbe Anmeldeseite.
Genutzter Rückgriff. repli_js_utilise erscheint nur, wenn ein
JavaScript-Klick als Rückgriff tatsächlich ausgeführt wurde.
Keines davon ist eine Garantie. Jedes macht aus einer stillen falschen Annahme etwas, das Sie lesen können.
Die Gewohnheit, die daraus folgt
Lesen Sie die Antwort, nicht das Urteil. succes: true ist das am wenigsten
aussagekräftige Feld der Ausgabe: Es sagt, dass die Anweisung lief. Ob die
Arbeit getan wurde, steht in allem drumherum: wo Sie sind, was der Server
geantwortet hat, ob etwas erzwungen werden musste.
Die Recherchekette folgt derselben Regel: campagne.py liest den Status jeder
abgerufenen Seite (visitee, refusee, insuffisante_legere und andere) und
behält nur die Seiten, die es lesen konnte.
Kurz gesagt
- Ein Lauf, der funktioniert hat, und ein eingetretenes Ergebnis sind zwei verschiedene Aussagen.
- Ein ruhiges Netz heißt nicht, dass der Server bereit ist.
- Die Signale gibt es (Position, HTTP-Status, Sitzungsabweichung, genutzter Rückgriff), und sie sagen mehr als das Urteil.