IE Fenster mit Passwort und Link ändern

    • Offizieller Beitrag

    Hallo,

    Brauche auch mal Hilfe. Um nicht immer ein IE Fenster auf haben zu müssen, wollte ich mir ne kleine GUI schreiben, die den Link für mich öffnet, nen bestimmten Bereich ausliest und nen Link anpasst, um ihn nutzen zu können, wenn doch mal Fehler auftreten.

    Der HTML Quelltext sieht dafür wir folgt aus:

    Die darin enthaltenen Links (a class="serviceTotals" href="status.cgi?host=all&servicestatustypes=) sollen um die IP Adresse des Monitoring Servers erweitert werden, um im Problemfall einfach drauf klicken zu können.
    Leider kann man mich mit RegExp jagen obwohl sie so nützlich sind.
    Kann mir jemand helfen?Ne GUI ist dann ja kein Problem, auch wenn ich gerade noch ne Lösung für die Passwortabfrage (http-auth) suche, aber das sollte wohl zu finden sein.

    Grüße

    Gun-Food


    Nachtrag: Die Zahlen für die Anzahl können sich natürlich ändern, sonst wäre ein Statusmonitor ja sinnlos.

    • Offizieller Beitrag

    Was ich bisher habe:

    [autoit]


    #include <INet.au3>
    #include <string.au3>
    #include <array.au3>
    #include <file.au3>

    Global $code = _INetGetSource("URL/cgi-bin/status.cgi?host=all")
    Global $Beginselection = "<DIV CLASS='serviceTotals'>Service Status Totals</DIV>"
    Global $Endselection = "</tbody></table>"

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

    FileWrite(FileOpen("code.txt", 2), $code)

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

    Global $found[1]


    Dim $lines_A
    If Not _FileReadToArray("code.txt", $lines_A) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    MsgBox(0, "Zeilen im Array",ubound($lines_A))

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

    For $x = 1 To $lines_A[0]
    If (StringInStr($lines_A[$x], $Beginselection) <> 0) Then
    MsgBox(0, "Anfang gefunden!", "Zeile: " & $x)
    For $y = $x To $lines_A[0]
    If (StringInStr($lines_A[$y], $Endselection) <> 0) Then
    MsgBox(0, "Ende gefunden!", "Zeile: " & $y)
    _ArrayAdd($found, _StringBetween1($lines_A[$x], $Beginselection, $Endselection))
    EndIf
    Next
    EndIf
    Next

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

    _ArrayDisplay($found, "Heute gefunden")

    Func _StringBetween1($s_String, $s_Start = 0, $s_End = 0)
    $s_Start = StringInStr($s_String, $s_Start) + StringLen($s_Start)
    Return StringMid($s_String, $s_Start, StringInStr($s_String, $s_End) - $s_Start)
    EndFunc ;==>_StringBetween1

    [/autoit]

    Habe als Basis einen Beitrag aus unserem Forum genommen, wo es um die Suche von bestimmten Strings in einem Array ging. Der Quelltext für StringBetween1 stammt von th.meger

    Mein Problem nun:
    Er hat die richtige Anzahl an Zeilen, findet auch den Anfang, aber leider das Ende nicht.
    Die Auswahl dafür fällt schwer, da die Ende-Bedingung mehr als einmal im Quelltext vorkommt. Also habe ich mir gedacht, er muss ja nur für den Rest des Dokumentes nach dem Ende Suchen, was ja die Sache erheblich vereinfacht.
    Aber so recht will er nicht. Jemand ne Idee?

    • Offizieller Beitrag

    Fehler war leichter gefunden als gedacht:

    [autoit]


    For $x = 1 To $lines_A[0]
    If (StringInStr($lines_A[$x], $Beginselection) <> 0) Then
    MsgBox(0, "Anfang gefunden!", "Zeile: " & $x)
    ExitLoop
    EndIf
    Next

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

    For $y = $x To $lines_A[0]
    If (StringInStr($lines_A[$y], $Endselection) <> 0) Then
    MsgBox(0, "Ende gefunden!", "Zeile: " & $y)
    _ArrayAdd($found, _StringBetween1($lines_A[$x], $Beginselection, $Endselection))
    ExitLoop
    EndIf
    Next

    [/autoit]


    Jetzt merkt er zwar zwei Einträge unter $found, nur leider steht da nichts drin.

    • Offizieller Beitrag

    Nur falls jemand ne Funktion zum Erweitern von Strings in einem Array suchen sollte:

    [autoit]


    _ArrayDisplay($found, "Heute gefunden - Alte Links")

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

    $ToAdd = "HREF='http://user:Password@URL/nagios/"
    $FindPos = "HREF='"
    $FindToIdentInSplit = "cgi"

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

    $found = _ModifyTextInArray($found, $ToAdd, $FindPos, $FindToIdentInSplit)

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

    Func _ModifyTextInArray ($s_String, $s_ToAdd, $s_ToFind, $s_ToIdentCorrectSplit)
    For $x = 0 To Ubound($s_String)
    $s_ArrayString = _ArrayToString($s_String,"",$x,$x)
    If StringInStr($s_ArrayString,$s_ToFind) Then
    $s_SplitStrings = StringSplit($s_ArrayString,$s_ToFind, 1)
    For $i = 0 To (ubound($s_SplitStrings) -1)
    MsgBox(0,"String Split",$s_SplitStrings[$i])
    If StringInStr($s_SplitStrings[$i], $s_ToIdentCorrectSplit) Then
    $s_NewString=$s_ToAdd & $s_SplitStrings[$i]
    MsgBox(0,"Neuer Link: ", $s_NewString)
    _ArrayDelete($s_String, $x)
    _ArrayInsert($s_String, $x - 1, $s_SplitStrings[$i - 1] & $s_NewString)
    EndIf
    Next
    EndIf
    Next
    Return $s_String
    EndFunc

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

    _ArrayDisplay($found, "Heute gefunden - Neue Links")

    [/autoit]

    Man sieht es ist von mir geschrieben. Verbesserungen gehen sicher immer noch. Aber erstmal funktioniert es so.