IE.au3 - Problem beiLayer: _IEFormGetObjByName

  • Hey liebe Skriptler!

    Nachdem ich mich heute früh mit einlesen von Texten beschäftigt habe möchte ich mir nun das IE.au3 Skript ein wenig näher bringen.
    Durch die Tuts habe ich erfahren, dass man einen Layer bei _IEFormGetObjByName benötigt.

    Gibt es eine Funktion, mit der man den Layer herausfinden kann bzw. wie finde ich diesen heraus und was, wenn der Layer sich ändern sollte? Ändert sich der Layer von Formulardaten überhaupt?

    Bzw mal anders ausgedrückt:
    Wie geht ihr damit um?

  • Sorry wenn ich mich undeutlich ausgedrückt hab.

    Ich frage mal anders, wenn ich ein Formular auswählen will und das über "Name" mache, müsste das doch so aussehen, oder?

    Beisp:

    [autoit]


    #include <ie.au3>
    $oForm = _IEFormGetObjByName($oIE, "Zahl des Layers") ;in dieser Zeile ist mein Problem, oder gehe ich damit falsch um?
    $oQuery = _IEFormElementGetObjByName($oForm, "name des Formulars per Quelltext ausgelesen")
    _IEFormElementSetValue($oQuery, "Wert, welcher eingetragen werden soll")

    [/autoit]

    Wenn nicht, wie dann? ;)

  • Achso du meinst den Index.

    Layer = schichtweises Anordnen von HTML-Elementen (wie ein Papierstapel)
    Index = Nummerierung der HTML-Elemente von 0-n

    [autoit]


    #include <ie.au3>
    $oIE = _IECreate("http://DeineSeiteZumEintragenDerDaten.de")
    $oForm = _IEFormGetObjByName($oIE, "Formularname")
    $oQuery = _IEFormElementGetObjByName($oForm, "NameDesFormularElements")
    _IEFormElementSetValue($oQuery, "Wert, welcher eingetragen werden soll")

    [/autoit]
    Code
    <form name="Formularname">
    <input name="NameDesFormularElements" type="text">
    </form>

    Der index ist nur interessant, falls der gleiche Name öfters vorkommen sollte und ja der kann sich ändern aber nur falls an der Seite was umgebaut wird, oder falls der Inhalt per AJAX oder einfach per JavaScript verändert wird.

  • Ach um Gotteswillen *schäm*

    Danke schonmal!
    Ich hatte mal nach nem Tut gegoogelt und meine da stand was von Layer....
    Ich probiers mal aus!
    Danke Stilgar!!

    EDit:

    Mein Quellcode hat kein <form name> oO

    Edit2:

    Ich bin nun weg, sicherlich schau ich vor 23 Uhr nicht mehr rein. Danke trotzdem und dann evt. bis später ;)
    Freue mich auf Antworten ;)

    Einmal editiert, zuletzt von Simmen (18. August 2009 um 18:42)

  • Also eine ID konnte ich bisher nicht finden.
    Mit dem Index geht es wohl, das Problem ist nur, dass dieser sich je nach Eingabe auch ändern kann und somit nicht variabel ist.

    Ich habe:

    [autoit]


    Name=
    Size=
    Value= (Wertlos, da alle anderen Forms auch 0 haben)
    Alt=

    [/autoit]

    Könnte es damit gehen?

    Wie gesagt, mit Index klappt es wohl, aber wenn sich der im Laufe der Skriptzeit ändert ist ja doof, oder?

  • Zitat

    das Problem ist nur, dass dieser sich je nach Eingabe auch ändern kann und somit nicht variabel ist.


    Öhm ?( Was denn nun?

    Ändert sich der Index oder nicht?
    Evtl. könnte man das Formular auch über Anzahl der Elemente bestimmen.

    Name=
    ...
    D.h. die Attribute haben jeweils "keinen" Wert?

  • Schon wieder undeutlich ausgedrückt, verdammt :D
    Der Index ist irgendwie komisch, ich weiß nicht nach welcher Form, aber er ändert sich wohl...

    das ganze ist ein <form action> ... für meine zeile bleibt dann
    <Name="xx" Alt="yy" Value="0" und Alt="zz>
    diese daten habe ich also, wobei "name" schon in der nächsten zeile verwendet wird (also als name des elements....)

  • Klar, kein Problem:

    Spoiler anzeigen
    [autoit]


    <form action="page.php" method="POST">

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

    <a title="aTitel">FormFeld</a></th>
    <th>5<input type="hidden" name="eigM" value="5"/></th>

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

    <input type="hidden" name="eig1" value="1"/>
    <input type="hidden" name="eig2" value="130" />
    <input type="hidden" name="eig3" value="5" /></th>
    <th><a href="javascript:max('eig0');" >max</a> </th>
    <th><input name="eig0" size="10" value="0" alt="FormFeld 5"/></th>
    </tr>

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


    Hieraus
    <input name="eig0" size="10" value="0" alt="FormFeld 5"/>
    nehme ich mein ElementName, also 'eig0' - das ist das formular was angewählt werden soll...

    Ich kanns auch mal mit anderen Forms probieren wenn das damit nicht gehen sollte.... Wollte mir die ganze Geschichte nur näher bringen ^^

  • Also das Formular ist:

    Code
    <form action="page.php" method="POST">
    ....
    </form>


    alles andere dazwischen Formularelemente wie in dem Fall die Inputs
    ( siehe http://de.selfhtml.org/html/formulare/index.htm )

    Das Formular könntest du in dem Fall z.B. über die Anzahl der Elemente auswählen, falls der Index wirklich variabel sein sollte.
    Also die Anzahl der Forms Abfragen _IEFormGetCollection und dann in einer Schleife die Anzahl der Elemente in den Formularen.

    Anschließend wäre der Input aus dem Beispiel dann :

    [autoit]

    $oQuery = _IEFormElementGetObjByName($oForm, "eig0")

    [/autoit]


    ( Hilfe! Das IE-Zeugs ist wirklich umständlich! )

  • Oh ja, das ist es!

    Okay Stilgar, das habe ich soweit verstanden und werde das mal versuchen. Nun die gleiche Sache in grün:

    Quellcode von einer ComboBox (also DropdownMenü):

    Code
    <select size="1" onchange="bluba(da)">
    ....
    </select>

    Dazwischen hab ich (je nach Anzahl der Elemente in meinem DropDownMenü) noch

    Code
    <option value=xx>
    </option>

    wie kann ich nun das n'te Element auswählen? oO

    Ansatz (AUS HILFE KOPIERT!!):

    [autoit]


    #include <IE.au3>
    $oIE = _IE_Example("form")
    $oForm = _IEFormGetObjByName($oIE, "ExampleForm")
    $oSelect = _IEFormElementGetObjByName($oForm, "selectExample")
    _IEFormElementOptionSelect($oSelect, "t3xT", 1, "byText")

    [/autoit]

    und nu? oO

    Hab weder Name, noch ID noch sonst was... oder?

  • In dem du
    _IEFormElementOptionSelect($oSelect, $iNr, 1, "byIndex" )
    nimmst, $iNr = index der Option (Menüpunkts)

    [EDIT]
    Das select-element über _IEFormElementGetCollection suchen bzw. über den index bestimmen.

  • Ah, GetCollection, hab ich garnit dran gedacht...

    Und wie würde das dann aussehen? Index des Names wäre von mir aus 0, damit würd ich ja schon weiter kommen...

    Ich schau mal HELP File an^^

    danke Stilgar ;)

  • Witzig bist Du, ich hab mich schon erkundigt und bla und blubb und es heißt FF.au3 soll viel zu instabil sein. Daher hab ich angefangen mir IE anzuschauen, obwohl ich vorher FF machen wollte...

    Naja, solange es funktioniert ... (noch funzt nix xD)

  • Hab mal gegoogelt, irgendwer sagte da was von FF sei instabil, kA...

    Evt prog ich bald mit FF weiter, mal schaun ;)