Announcement

Collapse
No announcement yet.

HTML-Formular vom Programm ausfüllen lassen.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • HTML-Formular vom Programm ausfüllen lassen.

    Hallo !

    Ich bin noch recht neu in Delphi.
    Ich probiere gerade mit HTLM und Delphi 5 herum.

    HTML - Seiten abzurufen ist ja noch recht einfach.
    Ich brauch auch kein kompletten Webbrowser.
    Ich hole mir eine HTML-Datei mit NMHTTP1.Get.
    Die Seite enthält nun ein Formular in dem man ein Namen eintragen muss und ein Button mit dem man das Formular zurück schickt.

    Wie kann ich jetzt mit Delphi die Forumular Antwort erzeugen ?????

    Andere Frage wie kann ich mit der Webbrowserkomponente von Delphi 5 auf den HTML-Code zugreifen ?

    bye

    Micha

  • #2
    Mit dem Laden der Daten und Ausfüllen von Feldern habe ich keine Probleme. Aber ich kann sie mit NMHTTP.Post nicht zurücksenden. Ich will keine TWebBrowser-Komponente benützen

    Hast Du dafür eine Lösung?
    Kannst Du mir ev. Code dazu Mailen?

    [email protected]

    Danke

    Brauchst Du noch Code für Dein Problem?

    Einfach Mail schicke

    Comment


    • #3
      Ich habe das gleiche Problem mit dem Felder ausfüllen !
      Kann mir einer helfen ????
      Danke !
      Schöne Grüße
      Zuletzt editiert von Gast_1; 31.03.2010, 13:04. Reason: Realname entfernt

      Comment


      • #4
        Das Formular ist zwischen den beiden Tags: FORM und /FORM
        als HTML-Quelltext enthalten.
        Es gibt grundsätzlich zwei Möglichkeiten eine Antwort zu verschicken. Die Methode POST oder die Methode GET.
        POST nutzt den HEADER, um Informationen zu übertragen und GET benutzt die Navigationszeile, um Parameter (getrennt durch "?" Fragezeichen) an den Server zu übertragen.
        Die in Deinem Fall benutzte METHODE ist zwischen den beiden Tags FORM und /FORM ersichtlich, wo sicherlich ein Button mit dem Namen SEND vorhanden sein dürfte.
        In unmittelbarer Nähe dazu ist die Methode angegeben (GET oder POST), mit der der Formularinhalt nach Drücken des SENDen-Knopfes verschickt wird.
        Davon hängt die weitere Vorgehensweise ab

        Comment


        • #5
          Ich verwende dazu eine TWebbrowser Komponente. Das geht schneller wie mit einer TClientSocket.

          Mit normalen Input-Feldern der HTML-Form funktioniert das wunderbar,
          aber ich weiß nicht wie ich das mit selects machen:
          <select>
          <option>...</option>
          <option>...</option>
          </select>
          (die sehen aus wie ComboBoxen)

          Weiß jemand wie man da was umstellen kann mit ner TWebbrowser Komponente

          Comment


          • #6
            hmm könnte einer mal so nen quelltext hier einfügen, wie man das in etwa macht?

            big th

            Comment


            • #7
              Hallo,

              das könnte etwa so aussehen: Das Programm demonstriert, wie man automatisch eine HTML-Formularseite aufrufen, Daten eintragen und sofort abschicken kann. Dazu wird eine Ereignisbehandlungsmethode für OnDocumentComplete zugeordnet, die sofort das automatischen Ausfüllen veranlasst, wenn die HTML-Seite vollständig geladen wurde.
              <pre>
              procedure TForm1.ToolButtonNavigateClick(Sender: TObject);
              begin
              WebBrowser1.Navigate(EditURL.Text);;
              WebBrowser1.OnDocumentComplete := WebBrowser1DocumentComplete;
              end;

              procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
              const pDisp: IDispatch; var URL: OleVariant);
              begin
              ToolButtonFillClick(self);
              WebBrowser1.OnDocumentComplete := nil;
              end;
              </pre>
              Das vollständige Beispielprojekt sieht so aus:
              <pre>
              { ************************************************** *******************
              Autor : Andreas Kosch
              Compiler : Delphi 5 UpdatePack#1
              Betriebssystem : Windows 2000
              Datum : 26.11.2000
              Beschreibung : Experimente mit TWebBrowser
              ************************************************** ******************** }

              unit WebBrowserAutoFillFrm;

              interface

              uses
              Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
              StdCtrls, OleCtrls, SHDocVw, ImgList, ComCtrls, ToolWin;

              type
              TForm1 = class(TForm)
              WebBrowser1: TWebBrowser;
              ToolBar1: TToolBar;
              ToolButton1: TToolButton;
              ToolButton2: TToolButton;
              ToolButtonFill: TToolButton;
              ImageList1: TImageList;
              EditURL: TEdit;
              ToolButtonNavigate: TToolButton;
              Memo1: TMemo;
              procedure FormCreate(Sender: TObject);
              procedure ToolButton1Click(Sender: TObject);
              procedure ToolButtonFillClick(Sender: TObject);
              procedure ToolButtonNavigateClick(Sender: TObject);
              procedure WebBrowser1DocumentComplete(Sender: TObject;
              const pDisp: IDispatch; var URL: OleVariant);
              private
              { Private-Deklarationen }
              public
              { Public-Deklarationen }
              end;

              var
              Form1: TForm1;

              implementation

              {$R *.DFM}

              uses ActiveX, MSHTML_TLB;

              { TWebBrowser benötigt einige Zeit, um das Document-Objekt zu
              initialisieren. }

              procedure TForm1.FormCreate(Sender: TObject);
              begin
              WebBrowser1.Navigate(EditURL.Text);
              end;

              procedure TForm1.ToolButtonNavigateClick(Sender: TObject);
              begin
              WebBrowser1.Navigate(EditURL.Text);;
              WebBrowser1.OnDocumentComplete := WebBrowser1DocumentComplete;
              end;

              procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
              const pDisp: IDispatch; var URL: OleVariant);
              begin
              ToolButtonFillClick(self);
              WebBrowser1.OnDocumentComplete := nil;
              end;

              { Aufgabe 1: Alle Links der aufgerufenen Seite ermitteln }

              procedure TForm1.ToolButtonFillClick(Sender: TObject);
              var
              aHTMLDoc : IHTMLDocument2;
              vWebForm : OleVariant;
              aEC : IHTMLElementCollection;
              i : Integer;
              vControl : OleVariant;
              begin
              if not VarIsEmpty(WebBrowser1.Document) then
              begin
              aHTMLDoc := WebBrowser1.Document as IHTMlDocument2;
              vWebForm := aHTMLDoc.Forms.Item('WebFormName', 0);
              aEC := IDispatch(vWebForm.all) as IHTMLElementCollection;
              for i := 0 to aEC.Length - 1 do
              begin
              vControl := aEC.Item(i, 0);
              if not VarIsEmpty(vControl) and vControl.isTextEdit then
              begin
              Memo1.Lines.Add(Format('TagName: %s; Name: %s; Value: %s',
              [vControl.TagName, vControl.Name, vControl.Value]));
              // Text in das Eingabefeld eintragen
              if vControl.Name = 'T1' then
              vControl.Value := 'Testeintrag';
              // Abschicken-Button automatisch auslösen
              if vControl.Name = 'B1' then
              vControl.Click;
              end;
              end;
              end;
              end;

              procedure TForm1.ToolButton1Click(Sender: TObject);
              begin
              Close;
              end;

              initialization
              OleInitialize(nil);

              finalization
              OleUninitialize;

              end.
              </pre&gt

              Comment


              • #8
                Hi!

                Danke sehr...hmm genau das Beispiel hatt eich schon gehabt.
                Naja der liest mir a irgendwelche Targets da aus und irgendwelche Links ermitteln. Hmm die Links weiss ich und es sollte in etwa so ablaufen:

                Ich möchte ein Tool schreiben, welches mir bestimmte Formularfelder einer HTML-Seite ausfüllt.
                In etwa so...
                Ich starte mein Programm, es erscheinen 2 Felder für Login und Passwort, diese 2 Felder sollen auf eine
                versteckte HTML-Seite
                zugreifen und dessen 2 Felder (Login und Passwort) ausfüllen. Nun würde ich ja ursprünglich auf meiner
                HTML-Seite
                weitergeleitet, auf der eben auch Formularfelder für bestimmte Abfragen sind, da diese aber für den Betrachter
                ebenfalls nicht
                sichtbar sein soll, erscheinen in meinem Programm sozusagen die nächsten Formularfelder der versteckten
                HTML-Seite.
                Jetzt möchte ich die bestimmten Felder ausfüllen und über einen Betätigungsbutton die Anfrage abschicken.
                Wenn das abgeschlossen ist, sollte die WebBrowserkomponente erscheinen und mir das Ergebnis zeigen oder
                auch in einem
                RichEdit oder so.
                Sagen wir mal so mein Tool soll auf HTML-Seiten in einem Intranet zugreifen und eben über eine ordentliche
                Oberfläche möchte ich
                Formularfelder ausfüllen lassen.

                Das soll ja dann auch noch weiter gehen, aber das später, wenn das erstmal steht!

                Es soll so eine Art Lasttreiber werden.
                Ich habe eine Datenbank, sagen wir mal 1000 Datensätze.
                und jetzt soll er in einer bestimmten Zeit eben Datensatz für Datensatz ins Formular einbinden, abschicken. Das Ergebnis der Abfrage in einer Datei gespeichert werden

                Comment


                • #9
                  Hallo,

                  die Kommentarzeile <i>{ Aufgabe 1: Alle Links der aufgerufenen Seite ermitteln } </i> in meinem Beispiel ist falsch (stammt noch vom alten Beispiel), aber ansonsten ist der Weg über IHTMLElementCollection der richtige Weg, um beliebige Controls der HTML-Seite über ihren Namen zu suchen, auszufüllen und den Formularinhalt abzuschicken

                  Comment


                  • #10
                    hmmm
                    geht das mit jeder seite? auch frames?

                    ich bin da noch ganz schön frisch was das betrifft.
                    also funzt das so, wie ich es oben funktional beschrieben habe?

                    kras

                    Comment


                    • #11
                      Wie ist das mit dem Type file. Ich habe auch schon bei MS nachgeschaut, aber keine Erklärung gefunden, wie man das Eingabefeld mit dem Dateinamen ausfüllt.
                      Wer kann helfen

                      Comment


                      • #12
                        hier habe ich noch ein beispiel...
                        http://skripts.virtualave.net/gmx.ra

                        Comment


                        • #13
                          Beim Versuch den Code auszuführen, erhalte ich immer bei:<BR>
                          aEC := IDispatch(vWebForm.all) as IHTMLElementCollection;<BR>
                          eine Zugriffsverletzung !?<BR>
                          Was läuft falsch ?<BR>
                          (Windows XP-prof, Delphi5 ent.)<BR&gt

                          Comment


                          • #14
                            Hallo,

                            das Beispiel geht davon aus, dass zum Zeitpunkt des Aufrufs sowohl <br>
                            a) die Webseite bereits vollständig im Browser geladen ist, und <br>
                            b) ein Formular mit dem Namen "WebFormName" auch wirklich existiert.
                            <pre>
                            ...
                            vWebForm := aHTMLDoc.Forms.Item('WebFormName', 0);
                            aEC := IDispatch(vWebForm.all) as IHTMLElementCollection;
                            ...
                            </pre>
                            Kommt wirklich eine Zugriffsverletzung oder eine OLE-Exception? Welcher Fehlernummer taucht dort auf

                            Comment


                            • #15
                              Bei mir kommt genau der gleiche Fehler.. Aber meine Form hat auch keinen namen.. was mache ich in dem fall??

                              Comment

                              Working...
                              X