Eingabefeld bei einer Internetseite auswählen

  • Hi,
    ich will auf der Seite von Klarmobil das Feld mit der Telefonnummer und dem Passwort auswählen.

    Leider bin ich mir nicht sicher was ich bei den Befehlen eingeben muss.

    Denke dies hier ist nicht korrekt

    [autoit]

    $oForm = _IEFormGetObjByName ($oIE, "klm_login_input")
    $oQuery = _IEFormElementGetObjByName ($oForm, "username")

    [/autoit]
    Spoiler anzeigen
    [autoit]

    #include<IE.au3>

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

    $internet_adresse = "http://klarmobil.de/"
    $nummer = "3554434"
    $oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
    If @error >0 Then Exit
    _IELoadWait ($oIE)
    If @error >0 Then Exit
    $oHWND = _IEPropertyGet($oIE, "hwnd") ;maximieren
    WinSetState ($oHWND, "", @SW_MAXIMIZE) ;maximieren

    $oForm = _IEFormGetObjByName ($oIE, "klm_login_input")
    $oQuery = _IEFormElementGetObjByName ($oForm, "username")
    _IEFormElementSetValue ($oQuery, $nummer) ;Text eingeben
    _IEFormSubmit ($oForm)

    [/autoit]

    Kann einer mal schauen, wie die Felder korrekt heissen.
    Weiss nicht nach was ich im Quelltest suchen muss ?(

    Danke

  • Hallo,
    da die "Form" auf der Seite keinen Namen hat, mußt du über die Nummer darauf zugreifen:

    [autoit]

    #include<IE.au3>

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

    $internet_adresse = "http://klarmobil.de/"
    $nummer = "3554434"
    $oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
    If @error >0 Then Exit
    _IELoadWait ($oIE)
    If @error >0 Then Exit
    $oHWND = _IEPropertyGet($oIE, "hwnd") ;maximieren
    WinSetState ($oHWND, "", @SW_MAXIMIZE) ;maximieren

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

    $oForm = _IEFormGetCollection ($oIE,0) ; <== Nummer der "Form"
    $oName = _IEFormElementGetObjByName ($oForm, "username")
    _IEFormElementSetValue ($oName, $nummer) ;Text eingeben
    _IEFormSubmit ($oForm)

    [/autoit]

    Viele Grüße
    Stilgar

    • Offizieller Beitrag

    Und _IELoadWait kannst du dir sparen, das hast du bei Create schon festgelegt (maximieren kannst du auch so):

    [autoit]

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

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

    $internet_adresse = "http://klarmobil.de/"
    $nummer = "3554434"
    $oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
    If @error >0 Then Exit
    ;~ _IELoadWait ($oIE) ; schon mit Flag Wait in _IECreate gesetzt
    ;~ If @error >0 Then Exit
    ;~ $oHWND = _IEPropertyGet($oIE, "hwnd") ;maximieren
    WinSetState("Microsoft Internet Explorer", "", @SW_MAXIMIZE) ;maximieren

    [/autoit]
  • Danke euch beiden :D

    Leider habe ich nun bei der Eingabe des Passwortes das gleiche Problem

    So gehts nicht :(

    Spoiler anzeigen
    [autoit]

    #include<IE.au3>

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

    Opt("WinTitleMatchMode", 2)

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

    $internet_adresse = "http://klarmobil.de/"
    $nummer = "3554434"
    $pass = "xxx"
    $oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
    If @error >0 Then Exit
    WinSetState("Microsoft Internet Explorer", "", @SW_MAXIMIZE) ;maximieren

    $oForm = _IEFormGetObjByName ($oIE, 0)
    $oQuery = _IEFormElementGetObjByName ($oForm, "username")
    _IEFormElementSetValue ($oQuery, $nummer) ;Text eingeben

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

    $oForm = _IEFormGetObjByName ($oIE, 1)
    $oQuery = _IEFormElementGetObjByName ($oForm, "password")
    _IEFormElementSetValue ($oQuery, $pass) ;Text eingeben
    ;~ _IEFormSubmit ($oForm)

    [/autoit]
    • Offizieller Beitrag
    [autoit]

    $oForm = _IEFormGetCollection($oIE, 0)
    $oName = _IEFormElementGetObjByName($oForm, "username")
    $oPW = _IEFormElementGetObjByName($oForm, "password")
    _IEFormElementSetValue($oName, $nummer)
    _IEFormElementSetValue($oPW, $pw)

    [/autoit]

    Habe es grad so getestet - Funzt.
    Aber ich habe die Seite für Kundenbereich verwendet:
    "https://kundenservice.klarmobil.de/privateservice.php?action=uebersicht"

    _IESubmit funktioniert übrigens mit dieser Seite nicht, auch _IEImgClick schlägt fehl.
    Einfach: Send({ENTER}) stattdessen

    EDIT

    Ich seh grad deinen Fehler:
    In diesem Objekt: $oForm = _IEFormGetCollection($oIE, 0)
    stecken beide Formelemente (Name und Passwort)
    Du beziehst dich plötzlich auf eine Form 1.

  • Dieses
    $oForm = _IEFormGetCollection($oIE, 0)

    mußt auf du auf 0 lassen, da es Form 0 auf der Seite ist.


    Und
    $oPW = _IEFormElementGetObjByName($oForm, "password")

    geht auch nur, wenn JavaScript aus ist, da dies zwischen <noscript> steht; ansonsten:

    $oPW = _IEFormElementGetObjByName ($oForm, "passtext")


    Viele Grüße
    Stilgar

    2 Mal editiert, zuletzt von Stilgar (12. August 2007 um 14:38)

  • Ahja, jetzt klappts natürlich :D

    Spoiler anzeigen
    [autoit]

    #include<IE.au3>

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

    Opt("WinTitleMatchMode", 2)

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

    $internet_adresse = "https://kundenservice.klarmobil.de/privateservice.php?action=uebersicht"
    $nummer = "131231321"
    $pw = "xxx"

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

    $oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
    If @error >0 Then Exit
    WinSetState("Microsoft Internet Explorer", "", @SW_MAXIMIZE) ;maximieren

    $oForm = _IEFormGetCollection($oIE, 0)
    $oName = _IEFormElementGetObjByName($oForm, "username")
    $oPW = _IEFormElementGetObjByName($oForm, "password")
    _IEFormElementSetValue($oName, $nummer)
    _IEFormElementSetValue($oPW, $pw)
    _IEFormSubmit ($oForm)

    [/autoit]
  • Stimmt beim Kundenlogin es kein JavaScript auf der Startseite leider schon :

    PHP
    <script type="text/javascript" language="JavaScript">
    <!-- 
    document.write('<input id="passtext" style="display:block" type="text" name="passtext" class="feld" value="Passwort" onFocus="passtext.style.display=\'none\';passpass.style.display=\'block\';passpass.focus();"  maxlength="60" tabindex="2"> <input id="passpass" style="display:none" type="password" tabindex="2" name="password" class="feld"  maxlength="60">');
    //-->
    </script>
    <noscript>
    <input type="password" name="password" class="pwfeld" tabindex="2">
    </noscript>

    Viele Grüße
    Stilgar

    Einmal editiert, zuletzt von Stilgar (12. August 2007 um 15:00)

  • hat von auch jemand Klarmobil ?(

    Will die Rechnungen downloaden.

    Ich komme nun in das Menü mit den Rechnungen.

    Wenn ich auf der Seite mit rechts klicke und "Quelltext anzeigen" mache, sind die Links zu den Rechnungen da.
    Wenn ich jedoch den Quelltext in eine Datei speichern lassen, sind die Links dort nicht vorhanden.

    Komme ich sonst noch irgendwie an die Links ?(

    Scheint auch Java zu sein

    [autoit]

    <script type="text/javascript" language="JavaScript" src="common.js"></script>

    [/autoit]
  • So hier ist er

    Spoiler anzeigen
    • Offizieller Beitrag

    Der für dich interessante Link ist:
    "/privateservice.php?action=invoices"

    Das ist ein relativer Verweis von der aktuellen Seite aus.
    Laß dir mit _IEPropertyGet($oIE, "locationurl") die URL der aktuellen Seite ausgeben (durch das Einloggen hat die ja eine ID mit drin).
    Jetzt ruf die aktuelle Seite mit angehängtem Rechnungslink auf (_IENavigate).

    Kanns selber nicht testen, Viel Erfolg.

  • will leider nicht so ganz

    Wenn ich eingeloggt bin, wird auf "Meine Rechnung" geklickt.
    Jedoch habe ich im Link keine ID wie du geschrieben hast :(

    Wie bekomme ich den Rechnungslink raus ?(

    Spoiler anzeigen
    [autoit]

    #include<IE.au3>
    #include<Array.au3>
    #include<Inet.au3>
    #include<String.au3>

    Opt("WinTitleMatchMode", 2)

    $internet_adresse = "https://kundenservice.klarmobil.de/privateservice.php?action=uebersicht"

    $nummer = "131231321"
    $pw = "xxx"

    $oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
    If @error >0 Then Exit
    WinSetState("Microsoft Internet Explorer", "", @SW_MAXIMIZE) ;maximieren

    $oForm = _IEFormGetCollection($oIE, 0)
    $oName = _IEFormElementGetObjByName($oForm, "username")
    $oPW = _IEFormElementGetObjByName($oForm, "password")
    _IEFormElementSetValue($oName, $nummer)
    _IEFormElementSetValue($oPW, $pw)
    _IEFormSubmit ($oForm)

    _IELinkClickByText ($oIE, "Meine Rechnung")

    $url = _IEPropertyGet($oIE, "locationurl")
    $source_hauptseite = _INetGetSource ($url)

    [/autoit]
    • Offizieller Beitrag

    Also das hier müssten doch die Links auf die Rechnungen sein:

    Code
    <tr bgcolor="#FFF3E5">
            <td width="88" valign="middle" class="formtable">xx.xx.xxxx</td>
            <td width="88" valign="middle" class="formtable">x.xx &euro;</td>
            <td width="88" valign="middle" class="formtable"><a href="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pdf" target="_blank"><img src="img_fm/ico_pdf.gif" border="0" width="16" height="16"></a>&nbsp;<a href="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pdf.pdf" target="_blank">Download</a></td>
            <td width="88" valign="middle" class="formtable"><a href="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.=CSV" target="_blank"><img src="img_fm/ico_csv.gif" border="0" width="16" height="16"></a>&nbsp;<a href="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pdf=CSV" target="_blank">Download</a></td>
            <td width="88" valign="middle" class="formtable"><a href="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..pdf" target="_blank"><img src="img_fm/ico_pdf.gif" border="0" width="16" height="16"></a>&nbsp;<a href="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pdf.pdf" target="_blank">Download</a></td>
            <td width="88" valign="middle" class="formtable"><a href="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.=CSV" target="_blank"><img src="img_fm/ico_csv.gif" border="0" width="16" height="16"></a>&nbsp;<a href="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pdf=CSV" target="_blank">Download</a></td>
          </tr>


    All das steht in einer Tabelle. Da es die erste auf der Seite ist, hat sie den Index 0. (Falls doch nicht, probier mit 1)
    Den Inhalt der Tabelle schreibst du dir erst mal in ein Array.

    [autoit]

    $oTable = _IETableGetCollection ($oIE, 0)
    $aTableData = _IETableWriteToArray ($oTable)

    [/autoit]

    Dann kannst du schauen, welche Arrayelemente die Links enthalten. z.B.: In ein anderes Array schreiben, wenn im Element 'Download' enthalten. Mußt du sehen, wie die Tabelle im Array wiedergegeben wird.

  • Ja genau dort sind die Links

    Spoiler anzeigen
    [autoit]

    #include<IE.au3>
    #include<Array.au3>
    #include<Inet.au3>
    #include<String.au3>

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

    Opt("WinTitleMatchMode", 2)

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

    $internet_adresse = "https://kundenservice.klarmobil.de/privateservice.php?action=uebersicht"

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

    $nummer = "131231321"
    $pw = "xxx"

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

    $oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
    If @error >0 Then Exit
    WinSetState("Microsoft Internet Explorer", "", @SW_MAXIMIZE) ;maximieren

    $oForm = _IEFormGetCollection($oIE, 0)
    $oName = _IEFormElementGetObjByName($oForm, "username")
    $oPW = _IEFormElementGetObjByName($oForm, "password")
    _IEFormElementSetValue($oName, $nummer)
    _IEFormElementSetValue($oPW, $pw)
    _IEFormSubmit ($oForm)

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

    _IELinkClickByText ($oIE, "Meine Rechnung")

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

    $url = _IEPropertyGet($oIE, "locationurl")
    $source_hauptseite = _INetGetSource ($url)

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

    $oTable = _IETableGetCollection ($oIE, 1)
    $aTableData = _IETableWriteToArray ($oTable)
    _ArrayDisplay($aTableData)

    [/autoit]

    Im Anhang habe ich ein Bild des Arrays, leider sind dort keine Links dabei X(

    Spoiler anzeigen


    EDIT: BugFix
    es klappt nicht mit dem Abfangen des Speichern-Fensters
    CLASS:32770

    [autoit]

    Opt("WinTitleMatchMode", 4)
    WinWait("[CLASSNAME=32770]")

    [/autoit]

    hab leider nichts in der Hilfe gefunden

    • Offizieller Beitrag

    Hi, hab grad auch mal probiert.
    Und wie es aussieht, gibt es wirklich keinen Weg das Fenster "Dateidownload" im MS-IE per AutoIt Befehl zu steuern.
    Alle Aktionen um den "Speichern" - Button zu betätigen:

    [autoit]

    ControlClick("Dateidownload", "", 4424)
    ControlClick("Dateidownload", "", "&Speichern")
    ControlClick("Dateidownload", "", "[CLASS:Button; INSTANCE:2]")
    Send("!s")

    [/autoit]

    führen nur dazu, dass der Button markiert wird.
    Aber auch ein

    [autoit]

    Send("{ENTER}")

    [/autoit]

    wenn der Button markiert ist, bleibt wirkungslos.
    Das gilt übrigens für alle Button in diesem Fenster. ?(


    EDIT: Achja, bevor hier der Tipp kommt mit _INetGet() zu laden: Das ist nicht möglich, weil zum Erreichen der Links eingelogt wird und beim Verlassen des Object Focus die Links nicht mehr erreichbar sind.

    Naja, eines geht doch: MouseClick()
    Aber wer macht das schon gern...

  • habe eben auch gemerkt, dass er den _IENavigate-Befehl nicht abschließt.
    Ich kann dahinter eine msgbox setzen.
    Diese wird nicht aufgerufen und das Script bleibt dort stehen. 8o

    EDIT:
    So scheints nun einigermaßen zu funktionieren

    Habe nun __IENavigate genommen (2x _) :D
    Wobei z. B. Controlsend bzw. Controlcommand nicht funktioniert wenn ich den Dateinamen eingeben will 8o
    Und die Sleep brauche ich auch 8o

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    #include<ArrayMore.au3>
    #include<IE.au3>

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

    Opt("WinTitleMatchMode", 4)

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

    $internet_adresse = "https://kundenservice.klarmobil.de/privateservice.php?action=uebersicht"

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

    $nummer = "131231321"
    $pw = "xxx"

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

    $oIE = _IECreate ($internet_adresse, 0, 1, 1, 0)
    If @error >0 Then Exit
    WinSetState("Microsoft Internet Explorer", "", @SW_MAXIMIZE) ;maximieren

    $oForm = _IEFormGetCollection($oIE, 0)
    $oName = _IEFormElementGetObjByName($oForm, "username")
    $oPW = _IEFormElementGetObjByName($oForm, "password")
    _IEFormElementSetValue($oName, $nummer)
    _IEFormElementSetValue($oPW, $pw)
    _IEFormSubmit ($oForm)

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

    _IELinkClickByText ($oIE, "Meine Rechnung")

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

    $source_hauptseite = _IEDocReadHTML ($oIE)

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

    $arMatch2 = StringRegExp($source_hauptseite, '\d\d\.\d\d.\d\d\d\d', 3)
    $split = StringSplit($arMatch2[UBound($arMatch2) -1], ".")

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

    $tag = $split[1]
    $monat = $split[2]
    $jahr = $split[3]

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

    $datum = $jahr & "_" & $monat & "_" & $tag & "_"
    $pfad = "C:\"

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

    $arMatch = StringRegExp($source_hauptseite, '(privateservice\.php\?[\w?&=;_.]*(?=" target))', 3)
    _Array2DDblDel($arMatch, 0)

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

    ;~ _ArrayDisplay($arMatch)
    ;~ _ArrayDisplay($arMatch2)

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

    For $i = 0 to UBound($arMatch) -1
    $aktuell = StringReplace($arMatch[$i], "amp;", "")
    $string = StringInStr($aktuell, "EVN")
    If $string > 0 Then
    $art = "EVN"
    Else
    $art = "gesamt"
    EndIf

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

    $string_url = "https://kundenservice.klarmobil.de/" & $aktuell

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

    __IENavigate($oIE, $string_url, 1, 0x0800, "", "", "") ;Vorhandene Seite übernehmen, Tab erstellen und Seite laden
    WinWait("Dateidownload")
    sleep(500)

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

    ControlClick("Dateidownload", "&Speichern", 4427)
    WinWait("Speichern unter")
    ;~ MsgBox(0,"", WinExists("Speichern unter"))
    Sleep(100)
    WinActivate("Speichern unter")
    ;~ ControlCommand("Speichern unter","Spe&ichern in:","Edit","Editpaste","C:\" & "2007_07 " & $art & $endung)
    ;~ ControlSend("Speichern unter", "", 1148, "C:\" & "2007_07 " & $art & $endung)
    Send($pfad & $datum & " " & $art)
    ControlClick("Speichern unter","Spe&ichern in:","Button2")
    ;~ ControlClick("Speichern unter", "&Speichern", 1)
    Next

    [/autoit]

    EDIT:
    Wie baue ich am besten einen Schutz für meine Benutzerdaten???
    Am besten wäre, wenn ich das Passwort verschlüsselt in einer ini speichern könnte.
    Beim Start vom Script, soll es dann automatisch entpackt werden :D