Befolkning / indsendelse af formularer ved hjælp af 'TWebBrowser' i Delphi

click fraud protection

Det TWebBrowser Delphi-kontrol giver adgang til webbrowserfunktionaliteten fra dine Delphi-apps - for at give dig mulighed for at oprette et tilpasset web browsing-applikation eller for at tilføje internet-, fil- og netværksbrowsing, dokumentvisning og dataoverførselsfunktioner til din applikationer.

Webformularer

EN webformular eller a form på en webside giver en besøgende på websiden mulighed for at indtaste data, der i de fleste tilfælde sendes til serveren til behandling.

Den enkleste webform kunne bestå af en inputelement (rediger kontrol) og a Indsend knap. De fleste websøgemaskiner (som Google) bruger en sådan webformular til at give dig mulighed for at søge på internettet.

Mere komplekse webformularer kan indeholde rullelister, afkrydsningsfelter, radioknapper osv. En webformular ligner en almindelig Windows-formular med tekstindtastning og valg af kontroller.

Hver formular ville indeholde en knap - en indsendelsesknap - der beder browseren om at tage handling på webformularen (typisk for at sende den til en webserver til behandling).

instagram viewer

Programmatisk befolkning af webformularer

Hvis du i din desktop-applikation bruger TWebBrowser til at vise websider, kan du programmatisk kontrollere webformer: manipulere, ændre, udfylde, udfylde felter på en webformular og indsende den.

Her er en samling af brugerdefinerede Delphi-funktioner, du kan bruge til at liste alle webformularer på en webside, til at hente inputelementer, programmere udfylde felter og til sidst indsende formularen.

For lettere at følge eksemplerne, lad os sige, at der er en TWebBrowser-kontrol ved navn "WebBrowser1" på en Delphi (standard Windows) -formular.

Bemærk: du skal tilføje MSHTML til din brugsklausul for at udarbejde de her anførte metoder.

Vis webformularnavne, få en webformular efter indeks

En webside ville i de fleste tilfælde kun have én webformular, men nogle websider har muligvis mere end én webformular. Sådan får du navnene på alle webformularer på en webside:

fungere WebFormNames (const dokument: IHTMLDocument2): TStringList; Var formularer: IHTMLElementCollection; form: IHTMLFormElement; idx: heltal; begynde formularer: = dokument. Formularer som IHTMLElementCollection; resultat: = TStringList. Skab; til idx: = 0 til -1 + forms.længde gørebegynde form: = forms.item (idx, 0) som IHTMLFormElement; resultat. Tilføj (form.navn); ende; ende; 

En simpel brug til at vise listen over webformularnavne i en TMemo:

Var former: TStringList; begynde former: = WebFormNames (WebBrowser1.Document SOM IHTMLDocument2); prøve memo1.Lines. Tildel (formularer); endelig formularer. Gratis; ende; ende; 

Sådan gør du få forekomsten af ​​en webformular efter indeks. For en enkelt formularside vil indekset være 0 (nul).

fungere WebFormGet (const formNumber: heltal; const dokument: IHTMLDocument2): IHTMLFormElement; Var formularer: IHTMLElementCollection; begynde formularer: = dokument. Forms som IHTMLElementCollection; resultat: = former. Vare (formNumber, '') som IHTMLFormElement. ende; 

Når du har webformularen, kan du gøre det liste alle HTML-inputelementer ved deres navn, du kan Hent eller indstil værdien for hvert af felterneog endelig kan du indsend webformularen.

Websider kan være vært for webformularer med inputelementer som redigeringsbokse og rullelister, som du kan kontrollere og manipulere programmatisk fra Delphi-kode.

Når du har webformularen, kan du gøre det liste alle HTML-inputelementer ved deres navn:

fungere WebFormFields (const dokument: IHTMLDocument2; const formName: snor): TStringList; Var form: IHTMLFormElement; felt: IHTMLElement; fName: streng; idx: heltal; begynde form: = WebFormGet (0, WebBrowser1.Document SOM IHTMLDocument2); resultat: = TStringList. Skab; til idx: = 0 til -1 + formlængde gøre start felt: = form.item (idx, '') som IHTMLElement; hvis felt = ikke derefter Blive ved; fName: = field.id; hvis field.tagName = 'INPUT' derefter fName: = (felt som IHTMLInputElement) .name; hvis field.tagName = 'VÆLG' derefter fName: = (felt som IHTMLSelectElement) .name; hvis field.tagName = 'TEXTAREA' derefter fName: = (felt som IHTMLTextAreaElement) .name; resultat. Tilføj (fName); ende; ende;

Når du kender navnene på felterne på en webformular, kan du programmere få værdien for et enkelt HTML-felt:

fungere WebFormFieldValue ( const dokument: IHTMLDocument2; const formNumber: heltal; const feltnavn: snor): snor; Var form: IHTMLFormElement; felt: IHTMLElement; begynde form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); felt: = form. Element (feltnavn, '') som IHTMLElement; hvis felt = ikke derefter Afslut; hvis field.tagName = 'INPUT' derefter resultat: = (felt som IHTMLInputElement) .value; hvis field.tagName = 'VÆLG' derefter resultat: = (felt som IHTMLSelectElement) .value; hvis field.tagName = 'TEXTAREA' derefter resultat: = (felt som IHTMLTextAreaElement) .value; ende;

Et eksempel på brug til at få værdien af ​​et inputfelt med navnet "URL":

const FIELDNAME = 'url'; Var doc: IHTMLDocument2; fieldValue: snor; begynde doc: = WebBrowser1.Document SOM IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Tilføj ('Felt: "URL", værdi:' + feltværdi);ende;

Hele ideen ville ikke have nogen værdi, hvis du ikke ville være i stand til det udfyld webformularelementer:

procedure WebFormSetFieldValue (const dokument: IHTMLDocument2; const formNumber: heltal; const feltnavn, nyt værdi: snor); Var form: IHTMLFormElement; felt: IHTMLElement; begynde form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); felt: = form. Element (feltnavn, '') som IHTMLElement; hvis felt = ikke derefter Afslut; hvis field.tagName = 'INPUT' derefter (Mark som IHTMLInputElement) .value: = newValue; hvis field.tagName = 'VÆLG' derefter (Mark som IHTMLSelectElement): = newValue; hvis field.tagName = 'TEXTAREA' derefter (Mark som IHTMLTextAreaElement): = newValue; ende;

Indsend en webformular

Endelig, når alle felterne er manipuleret, vil du sandsynligvis sende webformularen fra Delphi-kode. Sådan gør du:

procedure WebFormSubmit ( const dokument: IHTMLDocument2; const formNumber: heltal); Var form: IHTMLFormElement; felt: IHTMLElement; begynde form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); form.submit; ende;

Ikke alle webformer er "open minded"

Nogle webformularer er muligvis vært for et captcha-billede for at forhindre, at websider manipuleres programmatisk.

Nogle webformularer bliver muligvis ikke sendt, når du "klikker på knappen Send". Nogle webformularer udfører JavaScript, eller en anden procedure udføres håndteres af "onsubmit" -hændelsen på webformularen.

Under alle omstændigheder kan websider styres programmeret, det eneste spørgsmål er "hvor langt er du parat til at gå?"

instagram story viewer