Befolk / send inn skjemaer ved å bruke 'TWebBrowser' i Delphi

De TWebBrowser Delphi-kontroll gir tilgang til nettleserfunksjonaliteten fra Delphi-appene dine - slik at du kan lage et tilpasset nett søkeprogram eller legge til Internett-, fil- og nettverkssøking, dokumentvisning og dataoverføringsfunksjoner til din applikasjoner.

Nettskjemaer

EN nettform eller a skjema på en webside lar en besøkende besøkende legge inn data som i de fleste tilfeller blir sendt til serveren for behandling.

Den enkleste nettformen kan bestå av en inngangselement (rediger kontroll) og a sende inn knapp. De fleste nettsøkemotorer (som Google) bruker et slikt nettskjema for å tillate deg å søke på internett.

Mer komplekse nettformer vil inkludere nedtrekkslister, avmerkingsbokser, radioknapper, etc. En nettform er omtrent som en standard windows-skjema med tekstinntasting og valg av kontroller.

Hvert skjema vil inneholde en knapp - en innsendingsknapp - som ber nettleseren om å iverksette tiltak på nettskjemaet (vanligvis for å sende det til en webserver for behandling).

Programmatisk populere nettformer

instagram viewer

Hvis du bruker TWebBrowser i skrivebordsapplikasjonen din til å vise websider, kan du programmatisk kontrollere webformer: manipulere, endre, fylle, fylle felt i et webskjema og sende det inn.

Her er en samling av tilpassede Delphi-funksjoner du kan bruke til å liste alle webskjemaene på en webside, for å hente inngangselementer, programmere å fylle felt og til slutt sende inn skjemaet.

For å lettere følge eksemplene, la oss si at det er en TWebBrowser-kontroll med navnet "WebBrowser1" på en Delphi (standard Windows) -skjema.

Merk: du bør legge til MSHTML til din bruksbestemmelse for å kompilere metodene som er oppført her.

Liste over nettformularnavn, få et webskjema etter indeks

En webside vil i de fleste tilfeller bare ha ett nettskjema, men noen websider kan ha mer enn ett webskjema. Slik får du navnene på alle webskjemaene på en webside:

funksjon WebFormNames (konst dokument: IHTMLDocument2): TStringList; Var skjemaer: IHTMLElementCollection; skjema: IHTMLFormElement; idx: heltall; begynne skjemaer: = dokument. Skjemaer som IHTMLElementCollection; resultat: = TStringList. Skape; til idx: = 0 til -1 + forms.lengde gjørebegynne form: = forms.item (idx, 0) som IHTMLFormElement; resultat. Legg til (form.name); slutt; slutt; 

En enkel bruk for å vise listen over webskjema-navn i en TMemo:

Var skjemaer: TStringList; begynne former: = WebFormNames (WebBrowser1.Document SOM IHTMLDocument2); prøve memo1.Lines. Tildele (skjemaer); endelig former. Gratis; slutt; slutt; 

Slik gjør du det få forekomsten av et nettskjema etter indeks. For en enkelt skjemaside vil indeksen være 0 (null).

funksjon WebFormGet (konst formNumber: heltall; konst dokument: IHTMLDocument2): IHTMLFormElement; Var skjemaer: IHTMLElementCollection; begynne skjemaer: = dokument. skjemaer som IHTMLElementCollection; resultat: = former. Vare (formNummer, '') som IHTMLFormElement. slutt; 

Når du har nettskjemaet, kan du gjøre det liste alle HTML-inngangselementene ved navn, du kan få eller angi verdien for hvert av feltene, og endelig kan du det send inn webskjemaet.

Nettsider kan være vert for webskjemaer med inngangselementer som redigeringsbokser og nedtrekkslister som du kan kontrollere og manipulere programmatisk fra Delphi-kode.

Når du har nettskjemaet, kan du gjøre det liste alle HTML-inngangselementene ved navn:

funksjon WebFormFields (konst dokument: IHTMLDocument2; konst formName: string): TStringList; Var skjema: IHTMLFormElement; felt: IHTMLElement; fName: streng; idx: heltall; begynne form: = WebFormGet (0, WebBrowser1.Document SOM IHTMLDocument2); resultat: = TStringList. Skape; til idx: = 0 til -1 + formlengde gjøre begynn felt: = form.item (idx, '') som IHTMLElement; hvis felt = null da Fortsette; fName: = field.id; hvis field.tagName = 'INPUT' deretter fName: = (felt som IHTMLInputElement) .name; hvis field.tagName = 'VELG' deretter fName: = (felt som IHTMLSelectElement) .name; hvis field.tagName = 'TEXTAREA' deretter fName: = (felt som IHTMLTextAreaElement) .name; resultat. Legg til (fName); slutt; slutt;

Når du kjenner navnene på feltene på et nettskjema, kan du programmere få verdien for et enkelt HTML-felt:

funksjon WebFormFieldValue ( konst dokument: IHTMLDocument2; konst formNumber: heltall; konst feltnavn: string): string; Var skjema: IHTMLFormElement; felt: IHTMLElement; begynne form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); felt: = form. Element (feltnavn, '') som IHTMLElement; hvis felt = null da Exit; hvis field.tagName = 'INPUT' deretter resultat: = (felt som IHTMLInputElement) .Value; hvis field.tagName = 'VELG' deretter resultat: = (felt som IHTMLSelectElement) .Value; hvis field.tagName = 'TEXTAREA' deretter resultat: = (felt som IHTMLTextAreaElement) .Value; slutt;

Et eksempel på bruk for å få verdien til et inputfelt som heter "URL":

konst FIELDNAME = 'url'; Var doc: IHTMLDocument2; fieldValue: string; begynne doc: = WebBrowser1.Document SOM IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Legg til ('Felt: "URL", verdi:' + feltValue);slutt;

Hele ideen ville ikke ha noen verdi hvis du ikke ville være i stand til det fyll ut webskjemaelementer:

fremgangsmåte WebFormSetFieldValue (konst dokument: IHTMLDocument2; konst formNumber: heltall; konst feltnavn, nytt Verdi: string); Var skjema: IHTMLFormElement; felt: IHTMLElement; begynne form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); felt: = form. Element (feltnavn, '') som IHTMLElement; hvis felt = null da Exit; hvis field.tagName = 'INPUT' deretter (felt som IHTMLInputElement) .value: = newValue; hvis field.tagName = 'VELG' deretter (felt som IHTMLSelectElement): = newValue; hvis field.tagName = 'TEXTAREA' deretter (felt som IHTMLTextAreaElement): = newValue; slutt;

Send inn et webskjema

Til slutt, når alle feltene er manipulert, vil du sannsynligvis sende inn webskjemaet fra Delphi-kode. Dette er hvordan:

prosedyre WebFormSubmit ( konst dokument: IHTMLDocument2; konst formNumber: heltall); Var skjema: IHTMLFormElement; felt: IHTMLElement; begynne form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); form.submit; slutt;

Ikke alle nettformer er "åpne sinn"

Noen webformer kan være vert for et captcha-bilde for å forhindre at nettsider blir manipulert programmatisk.

Noen webskjemaer kan ikke sendes inn når du "klikker på sendeknappen." Noen nettformer kjører JavaScript, eller andre prosedyrer blir utført håndtert av "onsubmit" -hendelsen på nettskjemaet.

I alle fall kan websider styres programmatisk, det eneste spørsmålet er "hvor langt er du forberedt på å gå?"

instagram story viewer