IE Fenster abfragen und Fehler abfangen?

  • Hi,

    ich öffne momentan eine Datei und lese dort Servernamen aus. Diese trage ich dann im IE ein und öffne die Seite. Soweit funktioniert das auch. Nun kann es vorkommen, dass einige Offline sind. Es wird dann die Meldung "Die Seite kann nicht angezeigt werden." bzw. "Server nicht gefunden" angezeigt. Der Code so weit:

    [autoit]


    #include <IE.au3>
    #include <file.au3>

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

    Dim $Dateiname = "dateiliste.txt"
    Dim $DateiInhalt
    Dim $oIE
    Dim $error = "Die Seite kann nicht angezeigt werden"

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

    If Not _FileReadToArray($Dateiname,$DateiInhalt) Then
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    For $x = 1 to $DateiInhalt[0]

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

    $oIE = _IECreate ($DateiInhalt[$x])

    ;Fehler: Die Seite kann nicht angezeigt werden. abfangen und Loggen
    ;Opt("WinTitleMatchMode",4)
    THEN
    $text = _IEBodyReadText($oIE)
    IF $text = "Die Seite kann nicht angezeigt werden" THEN
    _writeLog($DateiInhalt[$x])
    Msgbox(0,"HTML Read",$text)
    EXIT
    ENDIF
    Next

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

    Func _writeLog($ErrorCode)

    $file = FileOpen("log.txt", 1)
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    ELSE
    FileWriteLine($file, $ErrorCode & @CRLF)
    FileClose($file)

    EndIf
    EndFunc

    [/autoit]

    Ich habe schon mit ReadHtml und WinTitleMatchMode rumprobiert, leider ohne Erfolg.
    Kann mir jemand Denkanstöße geben :)

    • Offizieller Beitrag

    HI,

    ginge es so?

    Mußt natürlich $title anpassen.

    [autoit]


    ;Fehler im IE abfangen
    #include <IE.au3>
    AdlibEnable("check", 1000)

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

    $title = "FEHLER: Der angeforderte URL konnte nicht geholt werden - Microsoft Internet Explorer"
    $url = "www.google.de"

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

    $oIE = _IECreate($url)
    Sleep(2000)
    _IENavigate($oIE, "www.kfhksalhflksadh.dsfhk", 1)

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

    While 1
    Sleep(200)
    WEnd

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

    Func check()
    ConsoleWrite(WinGetTitle("") & @LF)
    If WinGetTitle("") = $title Then
    MsgBox(0, "", "Error")
    Exit (0)
    EndIf
    EndFunc ;==>check

    [/autoit]

    So long,

    Mega

  • bei deinem Code bekomme ich einen Fehler (frag nicht welchen :) ) ich habe aber Schnippsel genommen und das so eingefügt:

    [autoit]


    #include <IE.au3>
    #include <file.au3>

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

    Dim $Dateiname = "dateiliste.txt"
    Dim $DateiInhalt
    Dim $oIE
    Dim $error = "Server nicht gefunden - Microsoft Internet Explorer bereitgestellt von"

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

    If Not _FileReadToArray($Dateiname,$DateiInhalt) Then
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    ;Dateiinhalt auslesen
    For $x = 1 to $DateiInhalt[0]

    IF $x=1 THEN

    $oIE = _IECreate ($DateiInhalt[$x])
    ELSE

    _IENavigate($oIE,$DateiInhalt[$x],1)
    ENDIF
    _CheckTitle($DateiInhalt[$x])
    Sleep(2000)
    Next

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

    Func _checkTitle($name)
    ConsoleWrite(WinGetTitle("") & @LF)
    If WinGetTitle("") = $error Then
    _WriteLog($name)

    Exit (0)
    EndIf
    EndFunc

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

    Func _WriteLog($ErrorCode)
    $file = FileOpen("log.txt", 1)

    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    ELSE
    FileWriteLine($file, $ErrorCode & @CRLF)
    FileClose($file)

    EndIf
    EndFunc

    [/autoit]


    ok? Allerdings bleibt er nun bei der ersten Fehlermeldung stehen und öffnet die nächsten nicht mehr.

    Eidt (Mega) : Autoit-Tags

  • wenn ich es richtig verstehe, dann würde es doch mit exit(0) an der stelle das script beenden, oder?

    muss ich eigentlich bei WinGetTitle() den genauen Wortlaut eintragen, oder gehen auch nur Fragmente :)

  • ok, ich möchte halt nicht das script unterbrechen :) ich möchte die fehlermeldung abfangen und in eine log schreiben und danach dann die nächste url aufrufen :)

  • ups, dachte ich hätte die Zeile schon reisgenommen. Alles klar. Die Funktion schau mir gleich mal an. Zur Erklärung: ich habe hier fast 100 Drucker und da möchte ich sehen auf welche rui man zugreifen kann, daher. Die Fehlermeldung interessiert insofern nicht, aber den Gerätenamen schreibe ich dann ins Log :)
    Danke

    • Offizieller Beitrag

    Hi,

    kannst ja hiermit testen:

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>
    #include <file.au3>
    Opt("WinTitleMatchMode", 2)

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

    Global $Dateiname = @ScriptDir & "\dateiliste.txt"
    Global $error = "Server nicht gefunden - Microsoft Internet Explorer bereitgestellt von"
    Global $DateiInhalt

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

    If Not _FileReadToArray($Dateiname, $DateiInhalt) Then
    MsgBox(4096, "Error", " Error reading " & $Dateiname & " to Array error:" & @error)
    Exit
    EndIf

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

    Global $oIE = _IECreate($DateiInhalt[1])
    _checkTitle($DateiInhalt[1])

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

    ;Dateiinhalt auslesen
    For $x = 2 To $DateiInhalt[0]
    _IENavigate($oIE, $DateiInhalt[$x], 1)
    _checkTitle($DateiInhalt[$x])
    Sleep(2000)
    Next
    ProcessClose("iexplore.exe")
    Exit(0)

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

    Func _checkTitle($name)
    If WinGetTitle("") = $error Then _FileWriteLog(@ScriptDir & "\Log.txt", $DateiInhalt[$x] & " konnte nicht gefunden werden")
    EndFunc ;==>_checkTitle

    [/autoit]

    So long,

    Mega