_IEFormElementSetValue --> InvalidDataType

    • Offizieller Beitrag

    Hi,
    folgendes Probleme:
    Ich hatte für meinen maxdome-Zugang ein Anmeldescript geschrieben, dass auch funktioniert. Nur hatte ich damals nur mit Send( ) - Befehlen gearbeitet.
    Nun wollte ich das mal sauber mit den IE.au3 - Funktionen umschreiben. Bekomme aber immer eine Fehlermeldung:

    [autoit]

    $oIE = _IECreate ("https://maxdomeservice.1und1.de/login/start/index.php")
    $oForm = _IEFormGetCollection ($oIE, 0)
    $o_login = _IEFormElementGetCollection ($oForm, 1) ; Username ( Form ~Nr. 2, ~Name = 0 )
    $o_password = _IEFormElementGetCollection ($oForm, 2) ; Password ( Form ~Nr. 3, ~Name = 0 )
    _IEFormElementSetValue ($o_login, "eine@eMail")
    _IEFormElementSetValue ($o_password, "einPasswort")
    _IEFormSubmit ($oForm)

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

    ; Fehlermeldung:
    ; --> IE.au3 Error from function _IEFormElementSetValue, $_IEStatus_InvalidDataType

    [/autoit]


    Hat vielleicht jemand eine Idee?

  • so gehts ;)

    [autoit]

    #include<IE.au3>
    $oIE = _IECreate ("https://maxdomeservice.1und1.de/login/start/index.php")
    $oForm = _IEFormGetCollection ($oIE, 1)
    $oEmail = _IEFormElementGetObjByName ($oForm, "email")
    $oPassword = _IEFormElementGetObjByName ($oForm, "password")
    _IEFormElementSetValue ($oEmail, "eine@eMail")
    _IEFormElementSetValue ($oPassword, "einPasswort")
    _IEFormSubmit ($oForm)

    [/autoit]

    //edit vergessen die MsgBox rauszunehmen ;)

    • Offizieller Beitrag

    Danke snoozer,
    mein Fehler lag hier:
    $oForm = _IEFormGetCollection ($oIE, 0) statt
    $oForm = _IEFormGetCollection ($oIE, 1)

    Dann klappt auch meine Version über Index, allerdings ist dies im Widerspruch zur Hilfe kein Null-basierter Index, sondern bei 1 beginnend:

    [autoit]

    $o_login = _IEFormElementGetCollection ($oForm, 2) ; Username ( Form ~Nr. 2, ~Name = 0 )
    $o_password = _IEFormElementGetCollection ($oForm, 3) ; Password ( Form ~Nr. 3, ~Name = 0 )

    [/autoit]


    Unklar ist mir nur, warum sich die Formen auch in der Form:
    $oEmail = _IEFormElementGetObjByName ($oForm, "email")
    ansprechen lassen, obwohl die Objektnamen mit 0 ausgelesen werden.

  • Zitat

    Original von BugFix$oForm = _IEFormGetCollection ($oIE, 0) statt
    $oForm = _IEFormGetCollection ($oIE, 1)
    Dann klappt auch meine Version über Index, allerdings ist dies im Widerspruch zur Hilfe kein Null-basierter Index, sondern bei 1 beginnend


    so stimmt das nicht ganz die hilfe stimmt wunderbar nur wäre der nullbasierte index die suche auf der rechten seite wenn du dir den quelltext anschaust dann siehste dass die suche über den login steht und damit der login nicht mit dem nullbasierten index angesprochen werden kann....du kannst hier aber auch den namen der form verwenden(falls vorhanden).....

    Zitat

    Original von BugFixUnklar ist mir nur, warum sich die Formen auch in der Form:
    $oEmail = _IEFormElementGetObjByName ($oForm, "email")
    ansprechen lassen, obwohl die Objektnamen mit 0 ausgelesen werden.


    mhh das versteh ich nicht ganz aber bei mir gabs immer nur nen verweis zum feld bzw objekt....

    • Offizieller Beitrag

    Ich entere nochmal meinen Thread, da sich ein anderes Problem ergeben hat.
    Nach Übermittlung der Login-Daten popt ein Hinweisfenster auf:
    [Blockierte Grafik: http://img-up.net/thumbs/hinweis36uxM.PNG]
    Darauf reagiere ich mit:

    [autoit]

    WinWait("Sicherheitshinweis")
    ControlClick("Sicherheitshinweis", "", 6)

    [/autoit]


    Das funktioniert aber nur, wenn ich das Login per Hand durchführe. Bei Einloggen mittels "_IEFormSubmit ($oForm)" erscheint auch völlig richtig das Hinweisfenster (also Login-Daten korrekt übermittelt) aber die WinWait - Funktion erkennt nicht das Hinweisfenster. Alternative Versuche mit WinWaitActive oder WinExist führen zu gleichem Ergebnis.

    • Offizieller Beitrag

    Hier die Infos zum Hinweisfenster:

    Das Seltsame ist halt, dass bei manuellem Click auf "Login" das aufpopende Fenster von WinWait( ) erkannt wird, nicht aber bei Übertragung mit "_IEFormSubmit ($oForm)".

    EDIT

    Habs gefunden, per default wartet "_IEFormSubmit( )" bis die Seite komplett geladen ist. Das kann hier aber nur passieren, wenn vorher die Sicherheitsabfrage bestätigt wird.
    Also "_IEFormSubmit ($oForm, 0)" damit das Script weiterläuft und nun klappts auch.