Button im Html-Formular soll Skript starten

  • Hallo,
    jetzt suche ich schon seit zwei Stunden hier nach einer Lösung, komme aber nicht weiter.
    Ich habe auf einer Webseite ein Formular, dessen Felder mit Daten aus einer Datei gefüllt werden sollen, wenn ich auf den Button "Daten holen" klicke.
    D.h., dass dieser Button dann in etwa folgendes Skript aufrufen soll:

    [autoit]

    #include <IE.au3>
    $oIE = _IECreate ("D:\AutoIt-Skripte\test.html")
    $oForm = _IEFormGetObjByName ($oIE, "Formular")
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_1")
    _IEFormElementSetValue ($oQuery, "Text 1")
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_2")
    _IEFormElementSetValue ($oQuery, "Text 2")
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_3")
    _IEFormElementSetValue ($oQuery, "Text 3")

    [/autoit]

    Wie bekomme ich es hin, dass AutoIt diesen Button überwacht ?

    Danke
    Axel

    Einmal editiert, zuletzt von Axel_Zucker (10. April 2009 um 08:56)

  • Mache es doch so, dass beim Klick auf dem Button ein Fenster geöffnet wird (JavaScript: alert; AutoIt: WinWait())

  • Tut mir leid, aber Deinen Vorschlag verstehe ich nicht. Man kann doch mit "alert" nur Textausgaben machen.
    Kannst Du mir das bitte etwas ausführlicher erklären ?

  • Du kannst doch per JavaScript eine Meldung ausgeben lassen, wie z.B. "Ihre Daten werden geladen..."

  • Da hab ich mein Problem wohl noch nicht ausführlich genug beschrieben:
    Wenn ich auf den Button "Daten holen" clicke, dann soll ein Autoit-Skript ausgeführt werden, das mir dann die Formularfelder ausfüllt.

    Mein HTML-Code sieht bisher so aus:

    Das ist aber bisher keine gute Lösung, weil der zweite Button "Abschicken" ja auch noch das Formular versenden soll.

  • Mach nochmal einen unsichtbaren Input dazu und einen einfachen Button:

    PHP
    <input type="hidden" name="Status"><br>
    <input type="button" value="Daten holen" name="Daten_holen"  onclick="this.form.Status.value='Daten holen'">

    den unsichtbaren Input frägst regelmäßig du per Browser ab und wenn dann "Daten holen" drin steht, füllst du das Formular aus.

  • Ich verstehe noch nicht, wie der Browser den unsichtbaren Button abfragen soll. Wozu brauche ich den überhaupt ? Kann ich nicht direkt den "Daten holen"-Button aus dem Autoit-Skript abfragen ? ?(

  • Es ergeben sich folgende Probleme, wenn du von HTMl aus ein AutoItscript starten willst:

    1) es geht nicht :D (wäre ja schlimm wenn jede Seite Programme starten könnte ...)
    2) Der Browser kann des Status eines HTMl-Buttons nicht abfragen (welchen auch, es gibt ja keinen), also Notlösung:
    2.2) Du baust ein unsichtbares input Feld ein - das machen viele Seiten um Infos zu übermitteln die dere Benutzer nicht sehen soll.
    2.3) Der Button "Daten holen" schreibt in das unsichtbare Feld irgendwas rein z.B. "Daten holen"
    2.4) Der Browser sieht alle paar Sekunden per AutoIt in dem unsichtbaren Feld nach ob was drinsteht und darauf hin kannst du mit AutoIt die Felder ausfüllen.

    Den HTML-Code dazu hatte ich dir schon hingeschrieben.


    [EDIT]
    Zweiter Vorschlag:
    Dein "Daten holen" Button kann auch so aussehen:

    PHP
    <input type="button" value="Daten holen" name="Daten_holen"  onclick="this.form.Daten_holen.value='Daten werden geholt ...'">


    und sobald sich das "value" ändert, trägt der Browser die Daten ein, dann brauchst du das unsichtbare Feld nicht.

    Einmal editiert, zuletzt von Stilgar (8. April 2009 um 15:42)

  • Zitat

    2.4) Der Browser sieht alle paar Sekunden per AutoIt in dem unsichtbaren Feld nach ob was drinsteht...

    Meinst Du, dass AutoIt den HTML-Quellcode nach Änderungen überwachen soll ?
    Oder wonach soll Autoit suchen ?

  • Ich habe das jetzt mal probiert. Es ist so, dass zwar die Beschriftung des Buttons sich ändert, aber der Quelltext bleibt davon unberührt.

    Die Idee von MatthiasG. mit dem Alert-Fenster habe ich inzwischen auch umgesetzt mit relativ gutem Erfolg.
    Nur öffnet mein Skript jedesmal ein neues IE-Fenster und schreibt dort dann die Daten rein. Wie kann ich das verhindern ?

    [autoit]

    #include <IE.au3>

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

    WinWaitActive("[CLASS:#32770; INSTANCE:2]", "") ;damit wird das Alert-Fenster überwacht

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

    $oIE = _IECreate ("D:\AutoIt-Skripte\test.html")
    $oForm = _IEFormGetObjByName ($oIE, "Formular")
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_1")
    _IEFormElementSetValue ($oQuery, "Text 1")
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_2")
    _IEFormElementSetValue ($oQuery, "Text 2")
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_3")
    _IEFormElementSetValue ($oQuery, "Text 3")

    [/autoit]

    Einfach die Zeile

    [autoit]

    $oIE = _IECreate ("D:\AutoIt-Skripte\test.html")

    [/autoit]


    austauschen gegen

    [autoit]

    $oIE = "D:\AutoIt-Skripte\test.html"

    [/autoit]


    geht jedenfalls nicht.

  • Natürlich bleibt der Quelltext unberührt, das "value"==Beschriftung des Buttons ändert sich doch, oder?

    Das Problem mit neuen Fenster:
    Einfach mal hier im Script auf _IECreate klicken und schon siehst du in der Hilfe, daß du das über den Parameter $f_tryAttach verhindern kannst.


    [EDIT]
    Button Version:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>

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

    $oIE = _IECreate("e:\Projekte\Software\test\get_data.html",1)
    Sleep(5000) ; habe probleme mit dem IE

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

    $oForm = _IEFormGetObjByName ($oIE, "Formular")
    $oStatus = _IEFormElementGetObjByName ($oForm, "get_Data")
    Do
    $sStatus = $oStatus.value
    Sleep(500)
    Until $sStatus <> "Daten holen"
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_1")
    _IEFormElementSetValue ($oQuery, "Text 1")
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_2")
    _IEFormElementSetValue ($oQuery, "Text 2")
    $oQuery = _IEFormElementGetObjByName ($oForm, "Feld_3")
    _IEFormElementSetValue ($oQuery, "Text 3")
    $oStatus.value = "Daten holen"

    [/autoit]
    Spoiler anzeigen

    [EDIT_2]
    Falls jemand so was für FireFox braucht:

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

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

    _FFStart("file:///e:\Projekte\Software\test\get_data.html")
    If _FFIsConnected() Then
    Do
    Sleep(500)
    Until _FFGetValueByName("get_Data") <> "Daten holen"

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

    _FFSetValueByName ("Feld_1", "Text 1")
    _FFSetValueByName ("Feld_2", "Text 2")
    _FFSetValueByName ("Feld_3", "Text 3")
    _FFSetValueByName("get_Data","Daten holen")
    EndIf

    [/autoit]

    3 Mal editiert, zuletzt von Stilgar (9. April 2009 um 12:31)

  • Es klappt !! :thumbup:

    Jetzt mit dem kompletten Code habe ich auch endlich kapiert, wie es gemeint war.

    Die Idee mit dem Alert-Fenster werde ich auch noch einmal testen.

    Danke Euch beiden für die Hilfe und die Geduld.

    Schöne Feiertage.
    Axel