Webbasierten Log-Vorgang automatisieren (Logdatei schreiben & speichern)

  • Hallo Leute,

    ich habe folgendes Anliegen. Vermute es ist relativ simpel, da ich so ca. 50% schon selber gescripted habe. Ist mein erstes mal mit AutoIT.
    Es geht um folgenden Prozess. Eine Steuersoftware für ein Heiztechnikmodul läuft über einen beliebigen Webbrowser und protokolliert ca. jede Sekunde auf belieben (klick auf button) Messwerte. Da ich die Messwerte gerne sekündlich - mit einem Klick ausgeführt - in die Logfile geschrieben hätte habe ich nun ein Script gebastelt, das jede Sekunde den Button ausführt, die Werte in die Logfile schreibt und mit ESC bestätigt. Soll heissen, ich habe in dem Script den Mausklick und die ESC Taste in einer Endlosschleife gleichzeitig laufen und bis zu einem gewissen Punkt (ca. 10 Minuten) funktioniert das ganze auch prächtig. Allerdings versagt dann irgendwann der Browser beim reinladen von Messdaten und die F5 Taste schafft dann nur Abhilfe.

    Leider aber wird der Aktualisierungsvorgang mit F5, durch das permanente benötigte drücken der ESC Taste gestoppt und somit bringt mir das ganze nichts. Jetzt ist meine Frage, wie ich es schaffe den Vorgang 10 Minuten laufen zu lassen, dann die Mausklick + ESC Kombination zu stoppen. F5 zu drücken, kurz nachlade (ca. 5 Sekunden) und wieder das ganze von vorne laufen zu lassen im Endlosmodus. Mein Script sieht momentan folgendermaßen aus.


    [autoit]

    Sleep(10000)

    [/autoit][autoit][/autoit][autoit]

    HotKeySet("{F9}", "_Beenden")
    While 1
    MouseClick("left")
    Sleep(50)
    send("{ESC}")
    Sleep(1)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _Beenden()
    Exit
    EndFunc

    [/autoit]

    Schonmal vielen Dank im vorraus!

    Gruß
    Equilibrium

  • Deine Lösung ist die denkbarst schlechteste und unzuverlässigste. Prüfe lieber folgende Alternativen:

    1. Frag den Hersteller bzw. schau dir die Dokumentation der Software genauer an. Ich würde mal vermuten, dass es auch mit den bereitgestellten Mitteln möglich sein sollte gewisse Dinge zu protokollieren. Evtl. stellt der Anbieter auch eine API bereit um die Werte ohne Browserautomatisierung direkt auszulesen oder es gibt weitere Dienste die dir erlauben direkter auf evtl. vorhandene Logdateien oder Hilftools des Gerätes zuzugreifen (z.B. per Telnet / SSH / FTP)

    2. Sofern Variante 1 keine Lösung ist solltest du dich tiefer mit der Automatisierung von Webbrowsern beschäftigen. Funktionen für den Internetexplorer ("ie.au3") sind bereits im Autoit Paket enthalten, Funktionen für Firefox findest du hier im Forum ("ff.au3" bzw. "ffex.au3")

    3. Performanter ist es allerdings auf einen richtigen Browser zu verzichten und stattdessen direkt mit dem Webserver zu kommunizieren. Dafür gibt es z.B. die "winhttp.au3"

    Alle drei Varianten sollten wesentlich zuverlässiger und schneller sein als deine derzeitige Lösung.

  • Zitat

    1. Frag den Hersteller bzw. schau dir die Dokumentation der Software genauer an. Ich würde mal vermuten, dass es auch mit den bereitgestellten Mitteln möglich sein sollte gewisse Dinge zu protokollieren. Evtl. stellt der Anbieter auch eine API bereit um die Werte ohne Browserautomatisierung direkt auszulesen oder es gibt weitere Dienste die dir erlauben direkter auf evtl. vorhandene Logdateien oder Hilftools des Gerätes zuzugreifen (z.B. per Telnet / SSH / FTP)

    2. Sofern Variante 1 keine Lösung ist solltest du dich tiefer mit der Automatisierung von Webbrowsern beschäftigen. Funktionen für den Internetexplorer ("ie.au3") sind bereits im Autoit Paket enthalten, Funktionen für Firefox findest du hier im Forum ("ff.au3" bzw. "ffex.au3")

    3. Performanter ist es allerdings auf einen richtigen Browser zu verzichten und stattdessen direkt mit dem Webserver zu kommunizieren. Dafür gibt es z.B. die "winhttp.au3"

    Hey misterspeed,

    deine von dir gennanten Vorschläge sind mir auch schon eingefallen. Leider ist das ganze so schlecht und laienhaft programmiert, das ich weder am Steuergerät über Telnet auslesen kann, noch irgendwie direkt am Webserver. Das Teil inklusive Software, ist eher der Marke "Zusammengeschustert" zuzuordnen. Dementsprechend umständlich ist auch die Software ausgelegt. Im Grunde reichen mir die Werte von ca. einer Nacht. Eben das mit der Aktualisierung will nicht klappen, da ich nicht weiß wie. Nach den Funktionen für die Browser werde ich mal suchen.

    Danke und Gruß
    Equilibrium

  • Um was für eine Website / Software handelt es sich?
    ggf. ist dein Anliegen doch einfacher zu bewältigen als wie du denkst.

    Alternativ steht dir auch noch TCP zur Verfügung um mit der Website zu kommunizieren.

  • Zitat

    Um was für eine Website / Software handelt es sich?
    ggf. ist dein Anliegen doch einfacher zu bewältigen als wie du denkst.

    Alternativ steht dir auch noch TCP zur Verfügung um mit der Website zu kommunizieren.

    Die Software ist eine intern Entwicklung von 2005. Leider ist aber auch niemand mehr im Haus der noch zu dieser Zeit da war.
    Im Grund läuft das Gerät 24h durch und wurde nicht ausgelegt sekündlich automatisiert zu protokollieren. Die Software kommuniziert über TCP. Dort jetzt Vorgänge Scripttechnisch mit umgehung des Webinterfaces abzugreifen, erscheint mir der Sache nicht Wert. Mit jedem Klick auf den Report Button schreibt er einen Wert in eine Logdatei auf der Platte, dann erscheint eine Maske mit einer Bestätigung die ich mit ESC Bestätige ohne die Mauszeigerposition ändern zu müssen für den Reportbutton. Ich weiß das ganze würde auch mit x y Koordinanten gehen, aber ich hatte jetzt einfach noch nicht die Zeit mich eingehend damit zu befassen. Danach geht es fröhlich weiter bis an den Punkt wo der Browser sich aufzuhängen scheint. F5 schafft jedenfalls abhilfe. Ich wäre zufrieden, wenn nach ca. 10 Minuten sich der Browser aktualisiert und das loggen fröhlich wie gewohnt weiter geht und wenn ich morgens wieder am Platz erscheine ich das ganze mit F9 abbreche.

  • Wenn das ganze von 2005 ist dürfte das ziemlich simpel aufgebaut sein, sprich sehr wahrscheinlich keine Flash basierte Webseite. Schau einfach den Quellcode der Webseite an und finde das Element des Buttons der da gedrückt werden muss. Ob du die ESC Taste danach wirklich brauchst oder ob ein einfaches Navigate zur Ursprunsseite auch reicht kann ich dir nicht sagen. Evtl. befindet sich auf der Bestätigungsseite auch ein weiterer Button den du automatisiert betätigen kannst. Auch hier hilft ein Blick in den Webseitenquellcode. Wenn du den Weg per winhttp gehen willst schau dir das Firefox Plugin "Live HTTP Headers" an. Damit kannst du mitschneiden was genau dein Browser an den Webserver sendet. (vermutlich ein einfaches GET mit einem bestimmten Parameter an eine PHP Datei.)

  • Zitat

    Wenn das ganze von 2005 ist dürfte das ziemlich simpel aufgebaut sein, sprich sehr wahrscheinlich keine Flash basierte Webseite. Schau einfach den Quellcode der Webseite an und finde das Element des Buttons der da gedrückt werden muss. Ob du die ESC Taste danach wirklich brauchst oder ob ein einfaches Navigate zur Ursprunsseite auch reicht kann ich dir nicht sagen. Evtl. befindet sich auf der Bestätigungsseite auch ein weiterer Button den du automatisiert betätigen kannst. Auch hier hilft ein Blick in den Webseitenquellcode. Wenn du den Weg per winhttp gehen willst schau dir das Firefox Plugin "Live HTTP Headers" an. Damit kannst du mitschneiden was genau dein Browser an den Webserver sendet. (vermutlich ein einfaches GET mit einem bestimmten Parameter an eine PHP Datei.)

    Ja das ganze ist ziemlich simpel aufgebaut, und hat kein Flash. Ich versteh auch die vorgehensweise und weiß woaruf du hinaus willst. Der Weg ist zumindest viel ordentlicher und sicherer. Allerdings Frage ich mich, gibt es nicht einfach einen Befehl der die Schleife pausiert, F5 aufruft und die Schleife wieder von vorne startet, mal so eben provisorisch. Das rumwuseln im Quelltext und monitoren mit Live HTTP Headers kostet mir zuviel Zeit und Nerven heute. Ich wäre für ein kleines provisorisches Script dankbar.

    Gruß
    Equilibrium

  • [autoit]

    AdlibRegister(WarteMalKurz, 1000*60*10) ; Alle 10 Minuten

    [/autoit][autoit][/autoit][autoit]

    Func WarteMalKurz()
    Send('{F5}')
    Sleep(10000) ; Mal eben Zeit geben die Seite zu laden xD
    EndFunc

    [/autoit]


    Schnell und professionell xD