verpeilt ... bestehendes IE-Fenster übernehmen?

  • Hallo,

    irgendwie bin ich grad verpeilt.
    beim start wird ein IE-Fenster geladen (automatisch, nicht von AutoIT).
    In dieses möchte ich nun gerne User/PW eintragen und mich dort so anmelden.

    [autoit]


    $oIE = ;was muss hier hin???
    $oHWND = _IEPropertyGet($oIE, "hwnd")
    $oForm = _IEFormGetCollection ($oIE, 0)
    $oUsername = _IEFormElementGetObjByName ($oForm, "htmlb_60650_htmlb_18131_1")
    $oPassword = _IEFormElementGetObjByName ($oForm, "htmlb_60650_htmlb_18131_2")
    _IEFormElementSetValue ($oUsername, $ieuser)
    _IEFormElementSetValue ($oPassword, $iepw)
    _IEFormSubmit ($oForm, 0)

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

    doch wie übernehme ich nun das aktuelle fenster und lesen die HWND aus? ansonsten starte ich ja mit IECreate ...

    PS: ist doch IEAttach, oder? dann liegt der Fehler vllt doch woanders

  • Füg ma den Fensternamen ein. Ansonsten schau mal, ob es sowas wie _iewinattach oder sowas in der Art gibt. Sorry kann leider nicht genau nachschauen.

    Einmal editiert, zuletzt von Sn0opy (2. Juli 2007 um 12:36)

  • also IEAttach hatte ich gefunden.
    kann grad net sagen wodrans liegt ... aber die seite ist auch gerade nicht erreichbar (frag mich net wieso ... seit 2 jahren immer da, wo ich sie net brauche, und jetzt is sie weg oO) ....

    der kann dann nacher die obj. nicht auslesen. aber ob vorher alles richtig läuft, kann ich dann doch erst testen wenn die site wieder erreichbar ist.
    ich meld mich nochmal, wenn der fehler wirklich hier liegt.

  • ok, alsoi ieattach scheint zu gehen, aber user/pw eintragen geht net.
    fehlermeldung ist:

    --> IE.au3 Warning from function _IEFormElementGetObjByName, $_IEStatus_NoMatch
    --> IE.au3 Warning from function _IEFormElementGetObjByName, $_IEStatus_NoMatch
    --> IE.au3 Error from function _IEFormElementSetValue, $_IEStatus_InvalidDataType
    --> IE.au3 Error from function _IEFormElementSetValue, $_IEStatus_InvalidDataType

    und so sieht das ganze jetzt aus:

    [autoit]

    $oIE = _IEAttach("Portal")
    $oHWND = _IEPropertyGet($oIE, "hwnd")
    $oForm = _IEFormGetCollection ($oIE, 0)
    $oUsername = _IEFormElementGetObjByName ($oForm, "htmlb_1269_htmlb_239_1")
    $oPassword = _IEFormElementGetObjByName ($oForm, "htmlb_1269_htmlb_239_2")
    _IEFormElementSetValue ($oUsername, "user")
    _IEFormElementSetValue ($oPassword, "pw")
    _IEFormSubmit ($oForm, 0)

    [/autoit]


    wo ist der fehler?

    PS: der name ändert sich irgendwie immer, wodran liegt das oO

  • Also ich finde dein Script soweit ganz prima. Wo ich nicht ganz schlau draus werde ist, dass Du den hwnd referenzierst, aber im weiteren Verlauf gar nicht benötigst...

    [autoit]

    $oHWND = _IEPropertyGet($oIE, "hwnd")

    [/autoit]

    Wenn Du es mit sich ständig veränderendem Code zu tun hast, solltest Du gucken ob es irgendwelche fixen Bestandteile gibt.

    Ich hatte letztens ein SELECT-Element ohne Name und ohne id. da es sich auf der Seite um das einzige entsprechende Element handelte, habe ich folgenden Trick angewandt:

    [autoit]

    $HTML_rframe = _IEDocReadHTML ($oIE)
    $HTML_mod = StringReplace ($HTML, 'SELECT onchange', 'SELECT id=evil onchange')
    _IEDocWriteHTML ($oIE, $HTML_mod)
    $oIE_select = _IEGetObjById ($oIE, "evil")
    _IEFormElementOptionSelect ($oIE_select,$i ,1, 'byIndex',1)

    [/autoit]

    Habe also die Seite aus dem Browser geklaut, eine bestimmte Stelle auf der Seite gesucht (die rein zufällig Teil des Elements war, dass ich ansprechen wollte), die für meine Zwecke notwendige Information hinzugefügt und die Seite zurückgeschrieben.

    Du könntest also nachgucken, welcher Teil der Seite immer gleich bleibt und den gleichen schmutzigen Trick anwenden ^^

    Die Änderung bleibt übrigends nur bis zum nächsten Reload. Danach ist alles wieder jungfräulich.

    Falls das nicht hilft, bleibt noch die Collection der elemente zu ziehen, die Pos des Elements ausfindig zu machen und zu hoffen, dass wenigstens die fix bleibt ^^

    Viel Erfolg ^^

  • ah thx ... hatte es aus nem anderen script übernommen, wo ich es noch gebraucht habe. habs nun entfernt =)

    zum rest ... ich hab kein plan von html.
    was genau passiert da? das ganze ist für die arbeit, nicht dass da nacher ein echo zurückkommt *g*

    unten kann man schon sehen was gleich bleibt. also alles, was genau so heisst wie der name, verändert sich immer mit dem namen, der rest bleibt gleich. könnte man damit was anfangen?

    ansonsten ne andere frage .... wenn mir der quelltest gerade den aktuellen namen anzeigt und ich den ins script einfüge, müsste es doch gehen, oder?
    aber es geht irgendwie nicht oO

  • $oForm = _IEFormGetCollection ($oIE, 0)
    ^
    bist Du Dir sicher das Du das erste Formular der Seite haben willst?

  • Hi,
    kann dir leider nicht helfen X(
    Hab aber ne Frage zu

    [autoit]

    $oIE = _IEAttach("Portal")

    [/autoit]


    Damit kann man ja ein bereits existierendes IE-Fenster nutzen und z. B. seine Internet-Adresse eingeben, richtig?

    Was muß ich da genau in die () schreiben?

    Danke ;)

  • Zitat

    Original von Tweaky
    Hi,
    kann dir leider nicht helfen X(
    Hab aber ne Frage zu

    [autoit]

    $oIE = _IEAttach("Portal")

    [/autoit]


    Damit kann man ja ein bereits existierendes IE-Fenster nutzen und z. B. seine Internet-Adresse eingeben, richtig?

    Was muß ich da genau in die () schreiben?

    Danke ;)

    Einfach im scite den Befehl eingeben und F1 drücken. Dann kommt das Helpfile mit der richtigen Seite. Ist super geschrieben und funktioniert auch prima bei allen anderen Befehlen ^^

    Befehle = Funktionen etc.

    110101

  • schon klar ;)
    nur leider ist mein Englisch nicht so wunderbar. :D

    EDIT: OK hat geklappt :]

  • Am einfachsten währe es, wenn Du direkt das Formular über das name-Attribut ansprichst. Dein Formular müßte im Aufbau vereinfacht so aussehen:
    <Form name="yxyx">
    <input name="yellowfoo">
    <input name="bluefoo">
    </Form>

    ... mit dem "yxyx" könntest Du dann das Formular direkt ansprechen.

    [autoit]


    $oForm = _IEFormGetObjByName ( $oIE, "yxyx" )

    [/autoit]

    Einmal editiert, zuletzt von jonk (2. Juli 2007 um 20:36)

  • also wie schon oben geposted, im quelltext steht es so

    Zitat

    <span class="urTxtEmph" id=""><nobr>Corporate User-ID</nobr></span>

    <span id="htmlb_17339_htmlb_4073_1_ur_r" style="font-size:1em;"><input class="urEdfTxtEnbl" dsbl="false" autocomplete="off" maxlength="100" id="htmlb_17339_htmlb_4073_1" name="htmlb_17339_htmlb_4073_1" value=""></span>



    <span class="urTxtEmph" id=""><nobr>Passwort</nobr></span>

    <span id="htmlb_17339_htmlb_4073_2_ur_r" style="font-size:1em;"><input type="Password" class="urEdfTxtEnbl" dsbl="false" autocomplete="off" maxlength="100" id="htmlb_17339_htmlb_4073_2" name="htmlb_17339_htmlb_4073_2" value=""></span>

    und variabel sind:
    span id
    id
    name

    und ich glaube, was anderes kann ich nicht nehmen, oder?

  • ... da muß aber noch mehr sein ... mindestens ein <form> ...</form>. Von dem brauchst Du den Index oder den Namen ... dann sollten die Felder auch kein Problem sein....

  • hey,

    also viel finde ich nicht, aber ich habe hier den quelltext, da ich mich eh nicht in html auskenne

    das sieht ganz interessant aus =)
    und wie gehts dann weiter?
    $oForm = _IEFormGetObjByName ( $oIE, "DSMSender11faef3e53964ee94b89fd13901816b5" )

  • Hi,

    der HTML-Quelltext war schon sehr hilfreich :)

    Habe es nun einmal mit dem name-Attribut gemacht:

    [autoit]


    #include <ie.au3>
    $sFormName = "htmlb_16789_htmlb_3225"
    $sUserID = "htmlb_16789_htmlb_3225_1"
    $sPasswd = "htmlb_16789_htmlb_3225_2"

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

    $oIE = _IEAttach("Portal")
    if isObj($oIE)then
    $oForm = _IEFormGetObjByName ( $oIE, $sFormName)
    if isObj($oForm) Then
    $oUsername = _IEFormElementGetObjByName ($oForm, $sUserID)
    $oPassword = _IEFormElementGetObjByName ($oForm, $sPasswd)
    _IEFormElementSetValue ($oUsername, "user")
    _IEFormElementSetValue ($oPassword, "pw")
    _IEFormSubmit ($oForm,0)
    Endif
    Endif

    [/autoit]

    ... und einmal mit dem Index der HTML-Elemente (falls die Namen jedes Mal anders sind):

    [autoit]


    #include <ie.au3>
    $iForm_index=0
    $iUserID_index = 20
    $iPasswd_index = 21

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

    $oIE = _IEAttach("Portal")
    if isObj($oIE)then
    $oForm = _IEFormGetObjByName ( $oIE, $iForm_index)
    if isObj($oForm) Then
    $oUsername = _IEFormElementGetCollection($oForm, $iUserID_index)
    $oPassword = _IEFormElementGetCollection($oForm, $iPasswd_index)
    _IEFormElementSetValue ($oUsername, "user")
    _IEFormElementSetValue ($oPassword, "pw")
    _IEFormSubmit ($oForm,0)
    Endif
    Endif

    [/autoit]

    Einmal editiert, zuletzt von jonk (4. Juli 2007 um 21:02)

  • also da sich die namen immer ändern, denke ich, das variante 2 für mich die lösung wäre.
    habe aber natürlich beide getestet (auch mit aktuellem namen in variante 1), aber bei beiden kommt

    --> IE.au3 Warning from function _IEFormGetObjByName, $_IEStatus_NoMatch

    woran kann das noch liegen? kann ich dir sonst noch infos geben?

    aber schonmal big thx ... woeit wäre ich nieeeeeeeeee gekommen

    • Offizieller Beitrag

    Hallo,

    im 2. Script muß wahrscheinlich

    [autoit]

    $oForm = _IEFormGetObjByName ( $oIE, $iForm_index)

    [/autoit]


    durch

    [autoit]

    $oForm = _IEFormGetCollection ( $oIE, $iForm_index)

    [/autoit]


    ersetzt werden!

  • hmmm komisch, bei mir hat es mit einer lokalen Version funktioniert. Die Korrektur von bernd ist natürlich richtig ... copy&paste wurden glaube ich vom Teufel persönlich erfunden ... oder war es doch B.G ? :)

    Vielleicht befindet sich das Login auch in einem Frame?