Computerwissenschaften

Füllen / Senden von Formularen mit ‚TWebBrowser‘ in Delphi

Füllen / Senden von Formularen mit ‚TWebBrowser‘ in Delphi

Das TWebBrowser Delphi-Steuerelement bietet über Ihre Delphi-Apps Zugriff auf die Webbrowser-Funktionen, mit denen Sie eine angepasste Webbrowser-Anwendung erstellen oder Ihren Anwendungen Funktionen zum Surfen im Internet, in Dateien und im Netzwerk, zum Anzeigen von Dokumenten und zum Herunterladen von Daten hinzufügen können.

 

Web Forms

Ein Webformular oder ein Formular auf einer Webseite ermöglicht es einem Webseitenbesucher, Daten einzugeben, die in den meisten Fällen zur Verarbeitung an den Server gesendet werden.

Das einfachste Webformular kann aus einem Eingabeelement (Bearbeitungssteuerelement) und einer Senden- Schaltfläche bestehen. 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).

 

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 Ihrer Verwendungsklausel mshtml hinzufügen , 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:

 function WebFormNames(const document: IHTMLDocument2): TStringList;
varforms : IHTMLElementCollection;form : IHTMLFormElement;idx : integer;
beginforms := document.Forms as IHTMLElementCollection;result := TStringList.Create;for idx := 0 to -1 + forms.length dobegin  form := forms.item(idx,0) as IHTMLFormElement;  result.Add(form.name) ;end;
end;

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

 varforms : TStringList;
beginforms := WebFormNames(WebBrowser1.Document AS IHTMLDocument2) ;try  memo1.Lines.Assign(forms) ;finally  forms.Free;end;
end; 

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

 function WebFormGet(const formNumber: integer; const document: IHTMLDocument2): IHTMLFormElement;
varforms : IHTMLElementCollection;
beginforms := document.Forms as IHTMLElementCollection;result := forms.Item(formNumber,'') as IHTMLFormElement
end; 

Sobald Sie das Web – Formular haben, können Sie alle HTML – Eingabeelemente durch ihren Namen auflisten , können Sie den Wert für jedes der Felder und festlegen , und schließlich können Sie das Web – Formular einreichen .

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  alle HTML-Eingabeelemente nach ihrem Namen auflisten :

function WebFormFields(const document: IHTMLDocument2; const formName : string): TStringList; var   form : IHTMLFormElement;   field : IHTMLElement;   fName : string;   idx : integer; begin   form := WebFormGet(0, WebBrowser1.Document AS IHTMLDocument2) ;   result := TStringList.Create;   for idx := 0 to -1 + form.length do  begin field := form.item(idx, '') as IHTMLElement; if field = nil then Continue; fName := field.id; if field.tagName='INPUT' then fName := (field as IHTMLInputElement).name; if field.tagName='SELECT' then fName := (field as IHTMLSelectElement).name; if field.tagName='TEXTAREA' then fName := (field as IHTMLTextAreaElement).name; result.Add(fName) ;   endend;

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

function WebFormFieldValue(   const document: IHTMLDocument2;   const formNumber : integer;   const fieldName : string): stringvar   form : IHTMLFormElement;   field: IHTMLElement; begin   form := WebFormGet(formNumber, WebBrowser1.Document AS IHTMLDocument2) ;   field := form.Item(fieldName,'') as IHTMLElement;   if field = nil then Exit;   if field.tagName='INPUT' then result := (field as IHTMLInputElement).value;   if field.tagName='SELECT' then result := (field as IHTMLSelectElement).value;   if field.tagName='TEXTAREA' then result := (field as IHTMLTextAreaElement).value; end;

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

const   FIELDNAME='url'; var   doc :IHTMLDocument2;   fieldValue : stringbegin  doc := WebBrowser1.Document AS IHTMLDocument2;   fieldValue := WebFormFieldValue(doc, 0, FIELDNAME) ;   memo1.Lines.Add('Field : "URL", value:' + fieldValue) ;end;

Die gesamte Idee hätte keinen Wert, wenn Sie keine Webformularelemente ausfüllen könnten  :

procedure WebFormSetFieldValue(const document: IHTMLDocument2; const formNumber: integer; const fieldName, newValue: string) ; var   form : IHTMLFormElement;   field: IHTMLElement; begin   form := WebFormGet(formNumber, WebBrowser1.Document AS IHTMLDocument2) ;   field := form.Item(fieldName,'') as IHTMLElement;   if field = nil then Exit;   if field.tagName='INPUT' then (field as IHTMLInputElement).value := newValue;   if field.tagName='SELECT' then (field as IHTMLSelectElement) := newValue;   if field.tagName='TEXTAREA' then (field as IHTMLTextAreaElement) := newValue; end;

 

Senden Sie ein Webformular

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

procedure WebFormSubmit(   const document: IHTMLDocument2;   const formNumber: integer) ; var   form : IHTMLFormElement;   field: IHTMLElement; begin   form := WebFormGet(formNumber, WebBrowser1.Document AS IHTMLDocument2) ;   form.submit; end;

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?“

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.