Formulieren invullen / indienen met 'TWebBrowser' in Delphi

click fraud protection

De TWebBrowser Delphi-besturing biedt toegang tot de webbrowserfunctionaliteit vanuit uw Delphi-apps, zodat u een aangepast web kunt maken browserapplicatie of om internet-, bestands- en netwerk-browsing, documentweergave en het downloaden van gegevens aan uw toe te voegen toepassingen.

Webformulieren

EEN online formulier of een formulier op een webpagina kan een bezoeker van een webpagina gegevens invoeren die in de meeste gevallen voor verwerking naar de server worden gestuurd.

Het eenvoudigste webformulier kan er één zijn invoerelement (bewerk controle) en een indienen knop. De meeste webzoekmachines (zoals Google) gebruiken zo'n webformulier om op internet te zoeken.

Complexere webformulieren zijn onder meer vervolgkeuzelijsten, selectievakjes, keuzerondjes, enz. Een webformulier lijkt veel op een standaard Windows-formulier met tekstinvoer en selectieknoppen.

Elk formulier zou een knop bevatten - een verzendknop - die de browser vertelt om actie te ondernemen op het webformulier (meestal om het naar een webserver te sturen voor verwerking).

instagram viewer

Programmatisch invullen van webformulieren

Als u in uw bureaubladtoepassing de TWebBrowser gebruikt om webpagina's weer te geven, kunt u webformulieren programmatisch besturen: velden van een webformulier manipuleren, wijzigen, vullen, invullen en verzenden.

Hier is een verzameling aangepaste Delphi-functies die u kunt gebruiken om alle webformulieren op een webpagina weer te geven, invoerelementen op te halen, velden programmatisch in te vullen en het formulier uiteindelijk in te dienen.

Om de voorbeelden gemakkelijker te volgen, laten we zeggen dat er een TWebBrowser-besturingselement met de naam "WebBrowser1" is op een Delphi (standaard Windows) -formulier.

Let op: je moet toevoegen mshtml aan uw gebruiksclausule om de hier vermelde methoden te compileren.

Lijst met webformuliernamen, krijg een webformulier op index

Een webpagina heeft in de meeste gevallen slechts één webformulier, maar sommige webpagina's hebben mogelijk meer dan één webformulier. Hier leest u hoe u de namen van alle webformulieren op een webpagina kunt krijgen:

functie WebFormNames (const document: IHTMLDocument2): TStringList; var vormen: IHTMLElementCollection; vorm: IHTMLFormElement; idx: geheel getal; beginnen vormen: = document. Formulieren als IHTMLElementCollection; resultaat: = TStringList. Maken; voor idx: = 0 naar -1 + forms.length Doenbeginnen vorm: = forms.item (idx, 0) als IHTMLFormElement; resultaat. Voeg (form.name) toe; einde; einde; 

Een eenvoudig gebruik om de lijst met webformuliernamen in een TMemo weer te geven:

var vormen: TStringList; beginnen formulieren: = WebFormNames (WebBrowser1.Document NET ZO IHTMLDocument2); proberen memo 1. lijnen. Toewijzen (formulieren); Tenslotte vormen. Vrij; einde; einde; 

Hier is hoe download het exemplaar van een webformulier per index. Voor een enkele formulierpagina zou de index 0 (nul) zijn.

functie WebFormGet (const formNumber: geheel getal; const document: IHTMLDocument2): IHTMLFormElement; var vormen: IHTMLElementCollection; beginnen vormen: = document. Vormen net zo IHTMLElementCollection; resultaat: = formulieren. Item (formNumber, '') net zo IHTMLFormElement. einde; 

Zodra u het webformulier hebt, kunt u dat lijst alle HTML-invoerelementen op naam, jij kan haal de waarde op voor elk van de veldenen tot slot kunt u verzend het webformulier.

Webpagina's kunnen webformulieren hosten met invoerelementen zoals bewerkingsvakken en vervolgkeuzelijsten die u programmatisch kunt bedienen en manipuleren vanuit Delphi-code.

Zodra u het webformulier hebt, kunt u dat lijst alle HTML-invoerelementen op naam:

functie WebFormFields (const document: IHTMLDocument2; const formulier naam: draad): TStringList; var vorm: IHTMLFormElement; veld: IHTMLElement; fName: string; idx: geheel getal; beginnen vorm: = WebFormGet (0, WebBrowser1.Document NET ZO IHTMLDocument2); resultaat: = TStringList. Maken; voor idx: = 0 naar -1 + vorm. Lengte Doen beginveld: = form.item (idx, '') als IHTMLElement; als veld = nihil dan Doorgaan met; fName: = field.id; als field.tagName = 'INPUT' vervolgens fName: = (veld net zo IHTMLInputElement) .name; als field.tagName = 'SELECT' vervolgens fName: = (veld net zo IHTMLSelectElement) .name; als field.tagName = 'TEXTAREA' vervolgens fName: = (veld net zo IHTMLTextAreaElement) .name; resultaat. Voeg (fName) toe; einde; einde;

Als u de namen van de velden op een webformulier kent, kunt u dit programmatisch programmeren krijg de waarde voor een enkel HTML-veld:

functie WebFormFieldValue ( const document: IHTMLDocument2; const formNumber: geheel getal; const veldnaam: draad): draad; var vorm: IHTMLFormElement; veld: IHTMLElement; beginnen vorm: = WebFormGet (formNumber, WebBrowser1.Document NET ZO IHTMLDocument2); veld: = formulier. Item (veldnaam, '') als IHTMLElement; als veld = nihil dan Uitgang; als field.tagName = 'INPUT' vervolgens result: = (veld net zo IHTMLInputElement) .value; als field.tagName = 'SELECT' vervolgens result: = (veld net zo IHTMLSelectElement) .value; als field.tagName = 'TEXTAREA' vervolgens result: = (veld net zo IHTMLTextAreaElement) .value; einde;

Een voorbeeld van gebruik om de waarde te verkrijgen van een invoerveld met de naam "URL":

const FIELDNAME = 'url'; var doc: IHTMLDocument2; fieldValue: draad; beginnen doc: = WebBrowser1.Document NET ZO IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo 1. lijnen. Toevoegen ('Field: "URL", value:' + fieldValue);einde;

Het hele idee zou geen waarde hebben als u dat niet zou kunnen vul webformulierelementen in:

procedure WebFormSetFieldValue (const document: IHTMLDocument2; const formNumber: geheel getal; const fieldName, newValue: draad); var vorm: IHTMLFormElement; veld: IHTMLElement; beginnen vorm: = WebFormGet (formNumber, WebBrowser1.Document NET ZO IHTMLDocument2); veld: = formulier. Item (veldnaam, '') net zo IHTMLElement; als veld = nihil dan Uitgang; als field.tagName = 'INPUT' vervolgens (veld net zo IHTMLInputElement) .value: = newValue; als field.tagName = 'SELECT' vervolgens (veld net zo IHTMLSelectElement): = newValue; als field.tagName = 'TEXTAREA' vervolgens (veld net zo IHTMLTextAreaElement): = newValue; einde;

Dien een webformulier in

Ten slotte, als alle velden zijn gemanipuleerd, wilt u waarschijnlijk het webformulier van Delphi-code indienen. Hier is hoe:

procedure WebFormSubmit ( const document: IHTMLDocument2; const formNumber: geheel getal); var vorm: IHTMLFormElement; veld: IHTMLElement; beginnen vorm: = WebFormGet (formNumber, WebBrowser1.Document NET ZO IHTMLDocument2); vorm. indienen; einde;

Niet alle webformulieren zijn "open-minded"

Sommige webformulieren bevatten mogelijk een captcha-afbeelding om te voorkomen dat webpagina's programmatisch worden gemanipuleerd.

Sommige webformulieren worden mogelijk niet verzonden wanneer u 'op de verzendknop' klikt. Sommige webformulieren voeren JavaScript uit of een andere procedure wordt uitgevoerd door de "onsubmit" -gebeurtenis van het webformulier.

In ieder geval kunnen webpagina's programmatisch worden beheerd, de enige vraag is "hoe ver ben je bereid te gaan?"

instagram story viewer