Populați / Trimiteți formularele folosind „TWebBrowser” în Delphi

TWebBrowser Controlul Delphi oferă acces la funcționalitatea browserului Web din aplicațiile dvs. Delphi - pentru a vă permite să creați un Web personalizat aplicație de navigare sau pentru a adăuga funcții de navigare pe Internet, fișiere și rețele, vizualizarea documentelor și funcțiile de descărcare a datelor la dvs. aplicații.

Formulare web

A formular web sau a formular pe o pagina web permite unui vizitator al paginii web să introducă date care, în cele mai multe cazuri, sunt trimise serverului pentru procesare.

Cel mai simplu formular web ar putea consta dintr-unul element de intrare (controlul editării) și a Trimite buton. Majoritatea motoarelor de căutare web (cum ar fi Google) utilizează un astfel de formular web pentru a vă permite să căutați pe internet.

Formele web mai complexe ar include liste derulante, casete de selectare, butoane radio etc. Un formular web seamănă foarte mult cu un formular Windows standard cu introducerea textului și controale de selecție.

Fiecare formular ar include un buton - un buton de trimitere - care îi spune browserului să ia măsuri asupra formularului web (de obicei pentru a-l trimite la un server web pentru procesare).

instagram viewer

Formularea Web Populating Programmatic

Dacă în aplicația dvs. de desktop utilizați TWebBrowser pentru a afișa pagini web, puteți controla programatic formularele web: manipularea, schimbarea, completarea, popularea câmpurilor unui formular web și trimiterea acestuia.

Iată o colecție de funcții personalizate Delphi pe care le puteți utiliza pentru a enumera toate formularele web pe o pagină web, pentru a prelua elemente de intrare, pentru a popula câmpuri programatic și pentru a trimite în final formularul.

Pentru a urmări mai ușor exemplele, să spunem că există un control TWebBrowser numit „WebBrowser1” pe un formular Delphi (Windows standard).

Notă: ar trebui să adăugați MSHTML la clauza de utilizare pentru a compila metodele enumerate aici.

Enumerați numele formularelor web, obțineți un formular web după index

În majoritatea cazurilor, o pagină web ar avea un singur formular web, dar unele pagini web pot avea mai mult de un formular web. Iată cum puteți obține numele tuturor formularelor web pe o pagină web:

funcţie WebFormNames (const document: IHTMLDocument2): TStringList; var forme: IHTMLElementCollection; formular: IHTMLFormElement; idx: număr întreg; începe formulare: = document. Formulare ca IHTMLElementCollection; rezultat: = TStringList. Crea; pentru idx: = 0 la -1 + forme.lungime doîncepe form: = formulare.item (idx, 0) ca IHTMLFormElement; rezultat. Adăugați (form.name); Sfârșit; Sfârșit; 

O simplă utilizare pentru a afișa lista de nume de formular web într-un TMemo:

var forme: TStringList; începe formulare: = WebFormNames (WebBrowser1.Document) LA FEL DE IHTMLDocument2); încerca memo1.Lines. Alocați (formulare); in cele din urma formulare. Liber; Sfârșit; Sfârșit; 

Iată cum se face obțineți instanța unui formular web după index. Pentru o singură pagină de formular, indicele ar fi 0 (zero).

funcţie WebFormGet (const formNumber: număr întreg; const document: IHTMLDocument2): IHTMLFormElement; var forme: IHTMLElementCollection; începe formulare: = document. Formulare la fel de IHTMLElementCollection; rezultat: = forme. Articol (numar formular, '') la fel de IHTMLFormElement. Sfârșit; 

După ce ai formularul web, poți lista tuturor elementelor de intrare HTML după numele lor, poti obțineți sau setați valoarea pentru fiecare dintre câmpuriși, în sfârșit, puteți trimiteți formularul web.

Paginile web pot găzdui formulare web cu elemente de intrare, cum ar fi casetele de editare și liste derulante pe care le puteți controla și manipula programatic din codul Delphi.

După ce ai formularul web, poți lista tuturor elementelor de intrare HTML după numele lor:

funcţie WebFormFields (const document: IHTMLDocument2; const formName: şir): TStringList; var formular: IHTMLFormElement; câmp: IHTMLElement; fNume: șir; idx: număr întreg; începe form: = WebFormGet (0, WebBrowser1.Document) LA FEL DE IHTMLDocument2); rezultat: = TStringList. Crea; pentru idx: = 0 la -1 + formă.lungime do begin field: = form.item (idx, '') ca IHTMLElement; dacă câmp = nil atunci Continua; Nume: = field.id; dacă field.tagName = 'INPUT' apoi Nume: = (câmp la fel de IHTMLInputElement) .name; dacă field.tagName = 'SELECTĂ' apoi Nume: = (câmp la fel de IHTMLSelectElement) .name; dacă field.tagName = 'TEXTAREA' apoi Nume: = (câmp la fel de IHTMLTextAreaElement) .name; rezultat. Adăugați (nume FN); Sfârșit; Sfârșit;

Când știți numele câmpurilor de pe un formular web, puteți programa în mod programatic obține valoarea pentru un singur câmp HTML:

funcţie WebFormFieldValue ( const document: IHTMLDocument2; const formNumber: număr întreg; const numele domeniului: şir): şir; var formular: IHTMLFormElement; câmp: IHTMLElement; începe form: = WebFormGet (formNumber, WebBrowser1.Document) LA FEL DE IHTMLDocument2); câmp: = formă. Element (Nume câmp, '') ca IHTMLElement; dacă câmp = nil atunci Ieșire; dacă field.tagName = 'INPUT' apoi rezultat: = (câmp la fel de IHTMLInputElement) .value; dacă field.tagName = 'SELECTĂ' apoi rezultat: = (câmp la fel de IHTMLSelectElement) .value; dacă field.tagName = 'TEXTAREA' apoi rezultat: = (câmp la fel de IHTMLTextAreaElement) .value; Sfârșit;

Un exemplu de utilizare pentru a obține valoarea unui câmp de intrare numit „URL”:

const FIELDNAME = 'url'; var doc: IHTMLDocument2; fieldValue: şir; începe doc: = WebBrowser1.Document LA FEL DE IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Adăugați ('Field: "URL", value:' + fieldValue);Sfârșit;

Întreaga idee nu ar avea nicio valoare dacă nu ai fi capabil completați elementele de formular web:

procedură WebFormSetFieldValue (const document: IHTMLDocument2; const formNumber: număr întreg; const fieldName, newValue: şir); var formular: IHTMLFormElement; câmp: IHTMLElement; începe form: = WebFormGet (formNumber, WebBrowser1.Document) LA FEL DE IHTMLDocument2); câmp: = formă. Articol (nume câmp, '') la fel de IHTMLElement; dacă câmp = nil atunci Ieșire; dacă field.tagName = 'INPUT' apoi (camp la fel de IHTMLInputElement) .value: = newValue; dacă field.tagName = 'SELECTĂ' apoi (camp la fel de IHTMLSelectElement): = newValue; dacă field.tagName = 'TEXTAREA' apoi (camp la fel de IHTMLTextAreaElement): = newValue; Sfârșit;

Trimiteți un formular web

În cele din urmă, când toate câmpurile sunt manipulate, probabil că doriți să trimiteți formularul web din codul Delphi. Iată cum:

procedura WebFormSubmit ( const document: IHTMLDocument2; const formNumber: număr întreg); var formular: IHTMLFormElement; câmp: IHTMLElement; începe form: = WebFormGet (formNumber, WebBrowser1.Document) LA FEL DE IHTMLDocument2); form.submit; Sfârșit;

Nu toate formularele web sunt „deschise în minte”

Unele formulare web pot găzdui o imagine captcha pentru a împiedica manipularea programatică a paginilor web.

Este posibil ca unele formulare web să nu fie trimise atunci când faceți clic pe butonul de trimitere. Unele formulare web execută JavaScript sau o altă procedură este executată de evenimentul "onsubmit" al formularului web.

În orice caz, paginile web pot fi controlate programatic, singura întrebare este „cât de departe sunteți pregătit să mergeți?”