_FF_RecordForm (V0.3)

  • Die nun einfachste Form mit FF ein Formular auszufüllen:

    _FF_RecordForm()

    Vorgehensweise:
    * Das Formular im Browser ausfüllen
    * Cursor im Formular stehen lassen ! Wichtig daran erkennt die Funktion das Formular!
    * Die Funktion ausführen und bekommt als Rückgabe ein Script für die FF.au3, das das Formular genau so wiederausfüllt.

    Die Funktion:

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ===================================================================
    ; Name ..........: _FF_RecordForm
    ; Description ...:
    ; AutoIt Version : V3.3.0.0
    ; Requirement(s).: FF.au3 / MozRepl
    ; Syntax ........: _FF_RecordForm()
    ; Parameter(s): .: -
    ; Return Value ..: Success - FF.au3 functions to fill the form
    ; Failure - empty string
    ; Author(s) .....: Thorsten Willert
    ; Date ..........: Thu Nov 05 13:43:14 CET 2009
    ; Version .......: 0.3
    ; ==============================================================================
    Func _FF_RecordForm()
    Local $sScript = ""
    Local $sCmd, $tmp, $iElements, $sType

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

    _FFCmd("FFau3.tmp=window.content.document.activeElement;")
    For $i = 0 To _FFGetLength("form") -1
    $iElements = _FFFormGetElementsLength($i) - 1
    For $j = 0 To $iElements
    If _FFCmd("FFau3.tmp==window.content.document.forms[" & $i & "].elements[" & $j & "] ? 1 : 0") = 1 Then ExitLoop
    Next
    ExitLoop
    Next

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

    For $j = 0 To $iElements
    $sType = _FFCmd(".forms[" & $i & "].elements[" & $j & "].type")
    Switch $sType
    Case "textarea","text","password"
    $sCmd = StringFormat(".forms[%i].elements[%i].value", $i, $j)
    $tmp = _FFCmd($sCmd)
    $sScript &= '_FFCmd("' & $sCmd & "='" & __FFValue2JavaScript($tmp) & "'"")" & @CRLF
    Case "radio","checkbox"
    $sCmd = StringFormat(".forms[%i].elements[%i].checked", $i, $j)
    $tmp = _FFCmd($sCmd)
    $sScript &= '_FFCmd("' & $sCmd & '=' & __FFB2S($tmp) & '")' & @CRLF
    Case "select-one"
    $sCmd = StringFormat(".forms[%i].elements[%i].selectedIndex", $i, $j)
    $tmp = _FFCmd($sCmd)
    $sScript &= '_FFCmd("' & $sCmd & '=' & $tmp & '")' & @CRLF
    EndSwitch
    Next

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

    Return $sScript
    EndFunc ;==>_FF_RecordForm

    [/autoit]

    bitte mal ausgiebig testen :)

    2 Mal editiert, zuletzt von Stilgar (5. November 2009 um 14:05)

  • Praktisch :D die software von meinem fingerabdruckleser kann auch formulardaten speichern, aba mit der neuen FF-Version geht das noch nit :D dann ordne ich jz halt meinen FIngerabdruck so einem Programm zu ^^

  • Hi,
    coole Idee, bin gerade am testen.
    Leider geht es bei mir nicht.

    Ich hab den obigen Code in eine neue .au3 Datei gespeichert. Danach bin ich in einen neuen Tab in Firefox und habe das Formular ausgefüllt und den Zeiger im letzten Feld belassen.
    Danach F5 in Scite.

    Darauf folgt dieser Fehler

    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "A:\projekt bo-co\form.au3"	
    >Exit code: 0	Time: 0.130
  • Hi,
    coole Idee, bin gerade am testen.
    Leider geht es bei mir nicht.

    Ich hab den obigen Code in eine neue .au3 Datei gespeichert. Danach bin ich in einen neuen Tab in Firefox und habe das Formular ausgefüllt und den Zeiger im letzten Feld belassen.
    Danach F5 in Scite.

    Darauf folgt dieser Fehler

    Code
    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "A:\projekt bo-co\form.au3"	
    >Exit code: 0	Time: 0.130


    Das ist keine Fehlermeldung, sondern nur die Meldung, daß das Programm ordnungsgemäß beendet wurde.

    Das obige Script ist nur eine Funktion, die für sich genommen "natürlich nichts" macht.

    Voll funktionsfähig wäre z.B. (die Funktion als Include-Datei gespeichert):

    [autoit]

    #include <FF.au3>
    #include "_FF_RecordForm.au3"

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

    If _FFConnect() Then
    $sScript = _FF_RecordForm()
    MsgBox(0,"", $sScript)
    EndIf

    [/autoit]
  • ok und ist es auch möglich eine Variable einzusetzen?
    Wenn es z.b. so aussieht:

    Code
    _FFCmd(".forms[0].elements[6].value='Schneider'")


    Schneider soll jetzt durch $nachname ersetzt werden.

    habe es schon mit

    Code
    _FFCmd(".forms[0].elements[6].value=$nachname")


    und

    Code
    _FFCmd(".forms[0].elements[6].value="$nachname)


    versucht.