Problem mit IE und Redirect in URL

  • Hallo, ich bin gerade dabei ein Script zu schreiben, welches

    • Zur Sicherheit einen Logout auf einem Internetportal via JSP aufruft
    • Dann eine neue URL zusammenbaut (via Parameter), welche den IE öffnet und den Benutzer dann gleich automatisch anmeldet

    Ganz wichtig !!

    Bitte schickt mir nur Eure Scripte und Verbesserungen, wenn Ihr es als normaler Benutzer OHNE lokale Adminrechte am laufen habt.
    Mit Adminrechten geht das Script nämlich schon !!


    Wir vermuten mal, dass das Problem am Redirect liegt !!

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <IE.au3>
    ;$CmdLine[1] = url to browse first e.g.: https://www.eanvportal.de/eanvd
    ;$CmdLine[2] = username
    ;$CmdLine[3] = password
    ;$CmdLine[4] = behnummer
    ;$CmdLine[5] = atbrolle
    ;$CmdLine[6] = file to load (optiona="")
    ;
    Opt("TrayIconHide", 0) ;0=show, 1=hide tray icon
    $oIE = _IECreate($CmdLine[1], 0, 0)
    _IENavigate($oIE, $CmdLine[1] & "/logout.jsp", 0)

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

    ;Pruefen ob ein Objekt erzeugt wurde
    If IsObj($oIE) Then
    MsgBox(0, "IsObj", "ist")
    $oIE.visible = 1 ; 0 = hides it
    _IELoadWait($oIE)
    _IENavigate($oIE, $CmdLine[1] & "/authorize/j_spring_security_check?j_username=" & $CmdLine[2] & "&j_password=" & $CmdLine[3] & "&j_behnummer=" & $CmdLine[4] & "&j_atbrolle=" & $CmdLine[5] & "")
    _IELoadWait($oIE)
    ;get title (if you are logged in
    $title = _IEPropertyGet($oIE, "title")
    MsgBox(0, "titel 1", $title); for debugging
    If (StringInStr($title, "Home", 0)) Then
    ; wir haben den login geschafft, nun koennen wir den explorer auch visible setzten
    $oIE.visible = 1 ; unhides it, now that we've hidden what we don't want
    $oIE.AddressBar = 0 ; turn off all four IE Bars - works on 3rd party bars too, mostly.
    $oIE.MenuBar = 0
    $oIE.StatusBar = 0
    $oIE.ToolBar = 0
    $oIE.Width = 1080
    $oIE.Height = 800
    $oIE.Left = 0
    $oIE.Top = 0
    ;und den BGS laden (falls uebergeben
    if (($CmdLine[0]) > 5) Then
    ;MsgBox(0,"titel 2",$title)
    ;_IENavigate($oIE, @ScriptDir & "/loading.html") ; kann verwendet werden um einen Hinweistext einzublenden, während das XFDL-Plugin lädt.
    _IENavigate($oIE, $CmdLine[6], 0)
    EndIf
    $hWnd_Active = _IEPropertyGet($oIE, "hwnd")
    While WinExists($hWnd_Active)
    Sleep(1000)
    $hWnd_Active = _IEPropertyGet($oIE, "hwnd")
    WEnd
    Exit
    EndIf
    MsgBox(0, "eANV client", "Anmeldung konnte nicht verarbeitet werden")
    Exit
    Else
    MsgBox(0, "IsObj", "ist nicht")
    EndIf
    ;wenn kein Objekt erzeugt wurde, Fehlermeldung ausgeben.
    MsgBox(0, "eANV client - Erstellen des IE-Objekts fehlgeschlagen", "Es konnte keine neue InternetExplorer-Instanz erzeugt werden!")
    Exit

    [/autoit]

    Ich habe jetzt eine CMD Box einmal als lokaler Administrator offen und eine zweite als normaler Benutzer. Die kompilierte EXE rufe ich via "Text.cmd" auf. In der Test.cmd werden testweise die Parameter mit übergeben.

    Wenn ich die Test.cmd als Admin aufrufe, geht ALLES. Ich bekomme zwar weiter hinten noch eine Fehlermeldung, die können wir dann aber später besprechen

    Wenn ich die Test.cmd als Benutzer aufrufe, wird weder die Messagebox

    [autoit]

    MsgBox(0, "IsObj", "ist")

    [/autoit]

    noch die Messagebox

    [autoit]

    MsgBox(0, "IsObj", "ist nicht")

    [/autoit]

    aufgerufen.

    Das heißt doch, dass das Script im Befehl

    [autoit]

    _IENavigate($oIE, $CmdLine[1] & "/logout.jsp", 0)

    [/autoit]

    hängen bleibt, oder ?

    Was kann ich da machen ?

    Gruss Hassan

    Nachtrag:

    Ich habe jetzt mal von Sysinternals den Process Monitor parallel mitlaufen lassen. Gefiltert habe ich auf die kompilierte EXE und die SUCCESS habe ich schon rausgenommen. Daraus dann ein Excel File erstellt, damit man noch Filtern kann.

    Damit wurde die Aktion aufgezeichnet, wenn ich das ganze als "Benutzer" laufen lassen.

    Bin mal gespannt, was Ihr da rauslesen könnt.

    Nachtrag 2:

    Ich habe festgestellt, dass das Problem auch nur unter Windows 7 (eventuell auch Vista) besteht. Als normaler Benutzer unter Windows XP geht das Script auch.

    4 Mal editiert, zuletzt von HassanMullah (26. November 2010 um 13:04) aus folgendem Grund: Excelfile hinzugefügt Das Problem war ein defektes Windows 7 Profil !!

  • Wie sollte hier jemand testen können ob dein Script funktioniert? Da sich jede Website unterscheidet (und somit auch die Schritte zum logout/login) kann man das nicht testen ohne Zugang zu deiner Seite.
    Auch sind Benutzerrechte ungleich Benutzerrechte. Man kann jedemenge Rechte einschränken, die standardmässig nicht eingeschränkt sind. Somit wäre ein Test nur auf dem betroffenen Benutzeraccount sinnvoll und keineswegs vergleichbar mit Benutzeraccounts bei mir zuhause. Gerade der Internetexplorer kann je nach Sicherheitsstufe deutlich eingeschränkt sein. (mal von Versionsunterschieden garnicht zu sprechen)
    Da es sich ja wenn ich mich recht erinnere um eine Firmenwebseite handelt wird dir nichts anderes übrig bleiben den Fehler selbst zu finden.

    Was du mal machen kannst:

    Da weder die eine noch die andere msgbox angezeigt wird würde ich

    a) das Browserfenster zur Fehlersuche sichtbar machen
    b) bereits direkt nach iecreate eine msgbox erstellen, die dir oIE ausgibt und @error ausgibt (jetzt kannst du zumindestens mal sehen und kontrollieren ob die ie instanz geladen wird und ob error codes auftreten siehe hife)
    c) das selbe spiel auch mit ienavigate (logout...) Anmerkung: Evtl solltest du hier statt 0 eine 1 setzen um zu warten bis die Seite geladen wurde und dem befehl eine variable zuweisen , wenn du das machst siehe d)
    d) vielleicht ist auch isobj ungeeignet um die Bedingung des äussersten if then else Konstrukts zu bilden? Deswegen würde ich das einfach so machen:

    [autoit]

    if $oIE <> 0 then ; es gab keinen fehler bei der objekt erstellung also log dich ein...

    [/autoit]


    Solltest du auch auf ienavigate (....logout) warten, dann kann die if bedingung auch prüfen ob der logout ausgeführt wurde:

    [autoit]

    if $oIE <> 0 And $logoutBefehl <> 0 then ; es gab keinen fehler bei der objekt erstellung und dem Aufruf der Logout Seite also log dich ein...

    [/autoit]


    Viel Erfolg ;)