Webseiten-AutoLogin mittels Internet Explorer

  • Hallo!
    Stilgar hat's für den Firefox gemacht ( Web-Seiten-Auto-Login Funktion und Generator für Login-Funktionen(V3.0) ), jetzt gibt es sowas auch für den Internet-Explorer.

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>

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

    $Url = 'schueler.cc'
    $User = 'user'
    $Pwd = 'pwd'

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

    $test = _IEAutoLogin($Url, $User, $Pwd)

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

    Func _IEAutoLogin($sUrl, $sUsername, $sPwd)
    ;funkey 09.09.09
    $oIE = _IECreate($sUrl)
    _IEErrorNotify(False)
    _IEErrorHandlerRegister()
    $oForms = _IEFormGetCollection($oIE)
    If @error Then
    Return SetError(1, _IEErrorHandlerDeRegister(), $oIE) ;'no forms --> no login'
    Else
    $Index = 0
    For $oForm In $oForms
    $oFormElements = _IEFormElementGetCollection($oForm)
    If IsObj($oFormElements) Then
    $IndexElement = 0
    For $oElement In $oFormElements
    If $oElement.Type = 'password' Then
    $oPwd = _IEFormElementGetObjByName($oForm, $oElement.Name)
    _IEFormElementSetValue($oPwd, $sPwd)
    For $i = $IndexElement - 1 To 0 Step -1
    $oUser = _IEFormElementGetCollection($oForm, $i)
    If $oUser.Type = 'text' Then
    _IEFormElementSetValue($oUser, $sUsername)
    ExitLoop
    EndIf
    Next
    If $oForm.action <> "0" And Not StringInStr($oForm.action, '.php') Then ;submit
    _IEFormSubmit($oForm, 0)
    _IELoadWait($oIE)
    Else ;click
    For $i = $IndexElement + 1 To $IndexElement + 10 ;check the next 10 elements
    $oButton = _IEFormElementGetCollection($oForm, $i)
    If $oButton.Type = 'submit' Then
    _IEAction($oButton, "click")
    ExitLoop
    EndIf
    Next
    EndIf
    Return SetExtended(_IEErrorHandlerDeRegister(), $oIE)
    EndIf
    $IndexElement += 1
    Next
    EndIf
    $Index += 1
    Next
    EndIf
    Return SetError(2, _IEErrorHandlerDeRegister(), $oIE) ;no password-field found
    EndFunc ;==>_IEAutoLogin

    [/autoit]


    Funktionsweise: Sucht das erste Passwort-Eingabefeld, das gefunden werden kann, schreibt das Passwort dort hinein, danach wird einfach in das Feld davor der Benutzername eingetragen und die Form bestätigt.

    Ich hätte gerne Rückmeldungen über Seiten, auf denen es nicht funktioniert (die gibt es sicher).

    Viel Spaß damit!

    Edit: Kleine Verbesserungen im Errorhandling ;)
    Edit: Die Funktion ist jetzt universeller :rock:

  • Anregungen:

    Es geht auf Seiten nicht, bei denen zwischen dem Password und dem Feld für den Benutzernamen noch irgendein anderer Input liegt. (CheckBox für Cookie ...)

    Darum habe ich bei der Funktion für FF eine zweite Schleife drin, die rückwärts vom Password-Feld weg einen Text-Input sucht und diesen ausfüllt.
    (war in der ersten Version nicht drin)

    Im englischen AutoItScript-Forum klappts auch nicht. Ist wieder eine dieser typischen Web2.murks Seiten bei denen unzählige Sachen hidden sind, im Endeffekt sind es dort 6 Formulare, von denen das zweite zum Einloggen ist - deswegen dieser komische FormOffset Parameter bei der FF Version.
    Wobei mir dort auch nicht ganz klar warum es nicht geht, schließlich ist im ersten Formular kein Passwort-Input.

    Auf anderen Seiten sieht es funktionierend aus.

    [EDIT]
    Habe dir mal eine PM mit Seiten geschickt wo es geht und nicht (ca. 50/50). Wo es nicht geht liegt es meistens an dem oben erwähnten Problem mit dem Text-Input.

    Einmal editiert, zuletzt von Stilgar (10. September 2009 um 13:14)

  • bei mir klappts nicht
    unter vista öffnet sich der Ie immer 2mal
    1mal leer und 1mal die angesteuerte Seite
    voll komisch :(

    Einmal editiert, zuletzt von NonStop (21. September 2009 um 14:58)