IE Formulare bearbeiten

  • Hallo,

    ich beschäftige mich grad mit Formularen im Internet Explorer.

    Dabei verwende ich Funktionen wie:
    _IEFormGetObjByName
    _IEFormElementGetObjByName

    Ich komme soweit auch klar, mit den Hilfe-Files. Mein größtes Problem ist die Namen der der "Forms" und so weiter herauszufinden. Oft sind diese nicht sehr klar benannt (finde ich).
    Wäre dankbar für ein par Tipps wie ich erkenne welche "Form" für wss zuständig ist, bzw. was ist der name und was die ID.
    So richtig kann ich das noch nicht unterscheiden.

    Gruß
    Dio

  • Schreibt die Informationen in die Console von Scite!

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>

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

    $Url = 'www.autoit.de'
    $oIE = _IECreate ($Url)

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

    $oForms = _IEFormGetCollection ($oIE)
    If @error Then
    MsgBox(0, '', 'Keine Formen enthalten')
    Else
    $Index = 0
    For $oForm In $oForms
    ConsoleWrite('Form-Index: ' & $Index & ' / Name: ' & $oForm.Name & @CRLF)
    $oFormElements = _IEFormElementGetCollection($oForm)
    If IsObj($oFormElements) Then
    $IndexElement = 0
    For $oElement In $oFormElements
    ConsoleWrite('Form: ' & $Index & ' /Element: ' & $IndexElement & ' /Name: ' & $oElement.Name & @CRLF)
    $IndexElement += 1
    Next
    EndIf
    $Index += 1
    Next
    EndIf

    [/autoit]

    mfg funkey

  • Danke für die fixen Antworten! ^^

    Zitat von leviathan


    bzw du kannst auch auf die Forms via Index zugreifen und nur eine Nummer mitgebe

    Ja, hab ich so ähnlich schon gehört, aber ich raff das nicht so recht. Gibt's ein Tut oder FAQ oder so zu diesen Geschichten? Die AutoIT-Hilfe kann mir da nicht wirklich helfen. Sie erklärt wie ich die Funktion anwende, aber nicht wie ich die nötigen Informationen dazu finde (was ja auch ok ist, sonst würde die Hilfe ja jeden Rahmen sprengen).

    Zitat von funkey

    Schreibt die Informationen in die Console von Scite!

    Tja, also wenn ich das ausführe öffnet sich sich der IE und ruft AutoIt.de auf, aber schreiben tut er da nix. Die Console von Scite ?( ... das wo ich den Quelltext reinschreibe nennt sich doch die Console oder?

    Ich hab das Ganze auf Seiten wie arcor.de schon hinbekommen, weil dort die Bezeichnungen klar waren. Dort wo ich es aber tatsächlich anwenden will ist der Quellcode so undurchsichtig das ich nix finde. Kenn mich aber eben mit HTML und so nicht so gut aus das ich genaue erkenne was jetzt ein Formularfeld ist und was nicht.

  • Die Konsole in Scite ist die Ausgabe unterhalb des Bereiches in dem ich den Code eingebe. Dort wo auch Fehlermeldungen angezeigt werden.

    Bei Autoit.de kommt zum Beispiel das Ergebnis raus:

  • Ahhh ok, danke!

    Ich hab den Code von Dir mal etwas umgemodelt, weil das Formular nicht direkt aufrufbar ist. Das erscheint erst nach einer Suchanfrage.

    [autoit]

    #include <IE.au3>

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

    $Url = 'http://blablabla.com:7794/jde/E1Menu.maf?envRadioGroup=&jdeowpBackButtonProtect=PROTECTED'
    ;$oIE = _IECreate ($Url)
    WinWaitActive("Speed Status - Update Single Pay Item - Microsoft Internet Explorer")
    $oForms = _IEFormGetCollection ($Url)
    If @error Then
    MsgBox(0, '', 'Keine Formen enthalten')
    Else
    $Index = 0
    For $oForm In $oForms
    ConsoleWrite('Form-Index: ' & $Index & ' / Name: ' & $oForm.Name & @CRLF)
    $oFormElements = _IEFormElementGetCollection($oForm)
    If IsObj($oFormElements) Then
    $IndexElement = 0
    For $oElement In $oFormElements
    ConsoleWrite('Form: ' & $Index & ' /Element: ' & $IndexElement & ' /Name: ' & $oElement.Name & @CRLF)
    $IndexElement += 1
    Next
    EndIf
    $Index += 1
    Next
    EndIf

    [/autoit]

    Also das Prog läuft fehlerfrei durch, aber es kommt die MessageBox. Also er findet keine Forms. Woran kann das denn liegen?
    Ein Formular müsste es sein. Zumindest hat es Eingabefelder bzw. Datenfelder. Ähnlich einer Anzeige mit Informationen über einen Artikel (VK, Lagerort, EK, Anlagedatum usw). Einige Felder sind eben veränderbar und eines dieser will ich finden.

  • du verwendest die funktionen falsch...
    du musst enweder mit _IEAttach ein IE fenster zum zugriff aktivieren oder ein neues mit _IECreate starten dann kannst du z.B. über
    $oIE = _IECreate($URL)
    _IEFormGetCollection ($oIE)
    darauf zugreifen.

  • So, jetzt hab ich's mit _IEAttach versucht und das scheint zu funzten...

    Das kommt raus:

    Spoiler anzeigen
    [autoit]

    Form-Index: 0 / Name: 0
    Form: 0 /Element: 0 /Name: divtag
    Form: 0 /Element: 1 /Name: indent
    Form: 0 /Element: 2 /Name: nodeId
    Form: 0 /Element: 3 /Name: paramRole
    Form: 0 /Element: 4 /Name: paramCollapsed
    Form: 0 /Element: 5 /Name: a
    Form-Index: 1 / Name: 0
    Form: 1 /Element: 0 /Name: nodeId
    Form: 1 /Element: 1 /Name: a
    Form-Index: 2 / Name: 0
    Form: 2 /Element: 0 /Name: a
    Form: 2 /Element: 1 /Name: paramRole
    Form-Index: 3 / Name: 0
    Form: 3 /Element: 0 /Name: a
    Form-Index: 4 / Name: 0
    Form: 4 /Element: 0 /Name: taskId
    Form: 4 /Element: 1 /Name: pTaskId
    Form: 4 /Element: 2 /Name: taskView
    Form: 4 /Element: 3 /Name: taskSeqNum
    Form: 4 /Element: 4 /Name: a
    Form-Index: 5 / Name: 0
    Form: 5 /Element: 0 /Name: paramRole
    Form-Index: 6 / Name: Preferences
    Form: 6 /Element: 0 /Name: menuLaunchPreference

    [/autoit]

    Also ehrlich gesagt kann ich damit nicht so richtig was anfangen, aber werde einfach jedes Feld probieren bis ich das Richtige hab.

    Das mache ich dann mit den Funktionen _IEFormElementGetObjByName und _IEFormElementSetValue, richtig?

  • Ok hab das jetzt probiert, leider erfolglos ;(

    aber danke das Ihr mich so gut unterstützt, das ist nicht selbstverständlich... :thumbup:

    Also so sieht mein (Test-)Quelltext aus:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    ;MsgBox(0,"AutoDiscountDeleter","Darauf achten dass:" & @lf & @lf & "- die letzten beiden Häkchen in der Liste (Paystatus 'A' und Grand Total) entfernt sind" & @lf & "- die Markierung in der Maske auf 'Due Date' liegt" & @lf & @lf & "'OK' klicken um zu starten")

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

    $oIE = _IEAttach ("Speed Status - Update Single Pay Item - Microsoft Internet Explorer", "embedded")

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

    ;while WinExists("Speed Status - Update Single Pay Item - Microsoft Internet Explorer")
    $oForm = _IEFormElementGetObjByName($oIE, "taskId", 3)
    _IEFormElementSetValue($oForm, "hier geaendert")
    ;Wend

    [/autoit]


    Das hat das Prog von FunKey (s. o.) ausgespuckt:

    Spoiler anzeigen

    Das Prog von Funkey musste ich etwas anpassen, das sieht so aus:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>

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

    $oIE =_IEAttach ("Speed Status - Update Single Pay Item - Microsoft Internet Explorer", "embedded") ;hier Namen des Fensters eintragen
    $oForms = _IEFormGetCollection ($oIE)
    If @error Then
    MsgBox(0, '', 'Keine Formen enthalten')
    Else
    $Index = 0
    For $oForm In $oForms
    ConsoleWrite('Form-Index: ' & $Index & ' / Name: ' & $oForm.Name & @CRLF)
    $oFormElements = _IEFormElementGetCollection($oForm)
    If IsObj($oFormElements) Then
    $IndexElement = 0
    For $oElement In $oFormElements
    ConsoleWrite('Form: ' & $Index & ' /Element: ' & $IndexElement & ' /Name: ' & $oElement.Name & @CRLF)
    $IndexElement += 1
    Next
    EndIf
    $Index += 1
    Next
    EndIf

    [/autoit]

    Also ich hab bei meinen Versuchen immer jeweils einen Formnamen eingefügt und dahinter die Index-Zahl. Hab das Prog gestartet (die entsprechende Seite hat natürlich existiert aber war nicht aktiv).
    Meine Gedanke war, dass in das entsprechende Formularfeld der String "hier geaendert" geschrieben werden sollte. War aber bei keinem einzigsten Formularfeld der Fall - ich hab alle Namen und Indexkombinationen aus der Formliste versucht.

    Ich bin etwas ratlos woran der Fehler liegt. Ob die Liste falsch ist oder mein (Test-)Quelltext? Es wundert mich schon das keiner der Formnamen auch nur im Ansatz ähnlich ist mit den Bezeichnungen der Formularfelder.

  • damit du FormElement verwenden kannst, musst du erst die Form und dann erst das Element holen;

    Spoiler anzeigen
    [autoit]

    $oForm = _IEFormGetCollection($oIE,Index)
    ; oder
    $oForm = _IEFrameGetObjByName($oIE,FORMNAME)

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

    $oElement = _IEFormElementGetObjByName($oForm,ELEMENTNAME)

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

    _IEFormElementSetValue($oElement

    [/autoit]