Formulare mit 'TWebBrowser' in Delphi ausfüllen / senden

click fraud protection

Das TWebBrowser Das Delphi-Steuerelement bietet Zugriff auf die Webbrowser-Funktionen Ihrer Delphi-Apps, damit Sie ein benutzerdefiniertes Web erstellen können Durchsuchen der Anwendung oder Hinzufügen von Funktionen zum Durchsuchen von Internet, Dateien und Netzwerken, Anzeigen von Dokumenten und Herunterladen von Daten Anwendungen.

Web Forms

EIN Web-Formular oder ein Formular auf einer Webseite Ermöglicht einem Webseitenbesucher die Eingabe von Daten, die in den meisten Fällen zur Verarbeitung an den Server gesendet werden.

Das einfachste Webformular könnte aus einem bestehen Eingabeelement (Steuerelement bearbeiten) und a einreichen Taste. Die meisten Web-Suchmaschinen (wie Google) verwenden ein solches Webformular, damit Sie im Internet suchen können.

Komplexere Webformulare umfassen Dropdown-Listen, Kontrollkästchen, Optionsfelder usw. Ein Webformular ähnelt einem Standardfensterformular mit Texteingabe- und Auswahlsteuerelementen.

Jedes Formular enthält eine Schaltfläche - eine Schaltfläche zum Senden -, mit der der Browser aufgefordert wird, im Webformular Maßnahmen zu ergreifen (normalerweise, um es zur Verarbeitung an einen Webserver zu senden).

instagram viewer

Programmgesteuertes Auffüllen von Webformularen

Wenn Sie in Ihrer Desktop-Anwendung den TWebBrowser zum Anzeigen von Webseiten verwenden, können Sie Webformulare programmgesteuert steuern: Bearbeiten, Ändern, Füllen, Auffüllen von Feldern eines Webformulars und Senden dieses Formulars.

Hier ist eine Sammlung von benutzerdefinierten Delphi-Funktionen, mit denen Sie alle Webformulare auf einer Webseite auflisten, Eingabeelemente abrufen, Felder programmgesteuert ausfüllen und das Formular schließlich senden können.

Nehmen wir an, es gibt ein TWebBrowser-Steuerelement mit dem Namen "WebBrowser1" in einem Delphi-Formular (Standard-Windows).

Hinweis: Sie sollten hinzufügen mshtml zu Ihrer Verwendungsklausel, um die hier aufgeführten Methoden zu kompilieren.

Auflisten von Webformularnamen, Abrufen eines Webformulars nach Index

Eine Webseite hat in den meisten Fällen nur ein Webformular, aber einige Webseiten haben möglicherweise mehr als ein Webformular. So erhalten Sie die Namen aller Webformulare auf einer Webseite:

Funktion WebFormNames (const Dokument: IHTMLDocument2): TStringList; var Formulare: IHTMLElementCollection; Form: IHTMLFormElement; idx: Ganzzahl; Start Formulare: = Dokument. Formulare als IHTMLElementCollection; Ergebnis: = TStringList. Erstellen; zum idx: = 0 zu -1 + forms.length tunStart form: = forms.item (idx, 0) als IHTMLFormElement; Ergebnis. Add (form.name); Ende; Ende; 

Eine einfache Verwendung zum Anzeigen der Liste der Webformularnamen in einem TMemo:

var Formulare: TStringList; Start Formulare: = WebFormNames (WebBrowser1.Document WIE IHTMLDocument2); Versuchen memo1.Lines. Zuweisen (Formulare); schließlich Formen. Kostenlos; Ende; Ende; 

Hier erfahren Sie, wie es geht Holen Sie sich die Instanz eines Webformulars nach Index. Für eine einzelne Formularseite wäre der Index 0 (Null).

Funktion WebFormGet (const formNumber: integer; const Dokument: IHTMLDocument2): IHTMLFormElement; var Formulare: IHTMLElementCollection; Start Formulare: = Dokument. Formen wie IHTMLElementCollection; Ergebnis: = Formulare. Item (formNumber, '') wie IHTMLFormElement. Ende; 

Sobald Sie das Webformular haben, können Sie Listen Sie alle HTML-Eingabeelemente nach ihrem Namen auf, du kannst Abrufen oder Festlegen des Werts für jedes der Felderund schließlich können Sie Senden Sie das Webformular.

Webseiten können Webformulare mit Eingabeelementen wie Bearbeitungsfeldern und Dropdown-Listen hosten, die Sie programmgesteuert über Delphi-Code steuern und bearbeiten können.

Sobald Sie das Webformular haben, können Sie Listen Sie alle HTML-Eingabeelemente nach ihrem Namen auf:

Funktion WebFormFields (const Dokument: IHTMLDocument2; const Formularname: Zeichenfolge): TStringList; var Form: IHTMLFormElement; Feld: IHTMLElement; fName: string; idx: Ganzzahl; Start form: = WebFormGet (0, WebBrowser1.Document WIE IHTMLDocument2); Ergebnis: = TStringList. Erstellen; zum idx: = 0 zu -1 + form.length tun Feld begin: = form.item (idx, '') als IHTMLElement; wenn Feld = dann nichts Fortsetzen; fName: = field.id; wenn field.tagName = 'INPUT' dann fName: = (Feld wie IHTMLInputElement) .name; wenn field.tagName = 'SELECT' dann fName: = (Feld wie IHTMLSelectElement) .name; wenn field.tagName = 'TEXTAREA' dann fName: = (Feld wie IHTMLTextAreaElement) .name; Ergebnis. Add (fName); Ende; Ende;

Wenn Sie die Namen der Felder in einem Webformular kennen, können Sie dies programmgesteuert tun Holen Sie sich den Wert für ein einzelnes HTML-Feld:

Funktion WebFormFieldValue ( const Dokument: IHTMLDocument2; const formNumber: integer; const Feldname: Zeichenfolge): Zeichenfolge; var Form: IHTMLFormElement; Feld: IHTMLElement; Start form: = WebFormGet (formNumber, WebBrowser1.Document WIE IHTMLDocument2); Feld: = Formular. Item (fieldName, '') als IHTMLElement; wenn Feld = dann nichts Ausgang; wenn field.tagName = 'INPUT' dann Ergebnis: = (Feld wie IHTMLInputElement) .value; wenn field.tagName = 'SELECT' dann Ergebnis: = (Feld wie IHTMLSelectElement) .value; wenn field.tagName = 'TEXTAREA' dann Ergebnis: = (Feld wie IHTMLTextAreaElement) .value; Ende;

Ein Verwendungsbeispiel zum Abrufen des Werts eines Eingabefelds mit dem Namen "URL":

const FIELDNAME = 'url'; var doc: IHTMLDocument2; Feldwert: Zeichenfolge; Start doc: = WebBrowser1.Document WIE IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Add ('Feld: "URL", Wert:' + Feldwert);Ende;

Die gesamte Idee hätte keinen Wert, wenn Sie nicht dazu in der Lage wären Füllen Sie Webformularelemente aus:

Verfahren WebFormSetFieldValue (const Dokument: IHTMLDocument2; const formNumber: integer; const fieldName, newValue: Zeichenfolge); var Form: IHTMLFormElement; Feld: IHTMLElement; Start form: = WebFormGet (formNumber, WebBrowser1.Document WIE IHTMLDocument2); Feld: = Formular. Item (Feldname, '') wie IHTMLElement; wenn Feld = dann nichts Ausgang; wenn field.tagName = 'INPUT' dann (Feld wie IHTMLInputElement) .value: = newValue; wenn field.tagName = 'SELECT' dann (Feld wie IHTMLSelectElement): = newValue; wenn field.tagName = 'TEXTAREA' dann (Feld wie IHTMLTextAreaElement): = newValue; Ende;

Senden Sie ein Webformular

Wenn alle Felder bearbeitet sind, möchten Sie wahrscheinlich das Webformular aus Delphi-Code senden. Hier ist wie:

Prozedur WebFormSubmit ( const Dokument: IHTMLDocument2; const formNumber: integer); var Form: IHTMLFormElement; Feld: IHTMLElement; Start form: = WebFormGet (formNumber, WebBrowser1.Document WIE IHTMLDocument2); form.submit; Ende;

Nicht alle Webformulare sind "aufgeschlossen"

Einige Webformulare enthalten möglicherweise ein Captcha-Bild, um zu verhindern, dass Webseiten programmgesteuert bearbeitet werden.

Einige Webformulare werden möglicherweise nicht gesendet, wenn Sie auf die Schaltfläche "Senden" klicken. Einige Webformulare führen JavaScript aus, oder eine andere Prozedur wird vom Ereignis "onsubmit" des Webformulars ausgeführt.

In jedem Fall können Webseiten programmgesteuert gesteuert werden. Die einzige Frage ist: "Wie weit sind Sie bereit zu gehen?"

instagram story viewer