Bevilja / skicka formulär med 'TWebBrowser' i Delphi

De TWebBrowser Delphi-kontrollen ger åtkomst till webbläsarfunktionaliteten från dina Delphi-appar - så att du kan skapa en anpassad webb surfarapplikation eller för att lägga till internet-, fil- och nätverkssökning, dokumentvisning och datahämtningsfunktioner till din tillämpningar.

Webblankett

EN webbformulär eller a formulär på en webbsida gör att en webbsökare kan ange data som i de flesta fall skickas till servern för behandling.

Den enklaste webbformen kan bestå av en ingångselement (redigera kontroll) och a Skicka in knapp. De flesta webbsökmotorer (som Google) använder ett sådant webbformulär för att du kan söka på internet.

Mer komplexa webbformulär skulle inkludera listrutor, kryssrutor, radioknappar etc. En webbformulär är ungefär som en standardfönsterform med textinmatning och valkontroller.

Varje formulär skulle innehålla en knapp - en skicka-knapp - som berättar webbläsaren att vidta åtgärder på webbformuläret (vanligtvis för att skicka det till en webbserver för behandling).

instagram viewer

Programmatiskt populera webbformulär

Om du använder TWebBrowser för att visa webbsidor i skrivbordsapplikationen kan du programmatiskt kontrollera webbformer: manipulera, ändra, fylla, fylla fält i ett webbformulär och skicka in det.

Här är en samling av anpassade Delphi-funktioner som du kan använda för att lista alla webbformulär på en webbsida, för att hämta inmatningselement, för att programmera fält och slutligen skicka in formuläret.

För att lättare följa exemplen, låt oss säga att det finns en TWebBrowser-kontroll med namnet "WebBrowser1" på en Delphi (standard Windows) -formulär.

Obs: du bör lägga till MSHTML till din användningsklausul för att sammanställa de metoder som listas här.

Lista namn på webbformulär, få ett webbformulär efter index

En webbsida skulle i de flesta fall bara ha en webbformulär, men vissa webbsidor kan ha mer än en webbformulär. Så här får du namnen på alla webbformulär på en webbsida:

fungera WebFormNames (const dokument: IHTMLDocument2): TStringList; var formulär: IHTMLElementCollection; form: IHTMLFormElement; idx: heltal; Börja formulär: = dokument. Formulär som IHTMLElementCollection; resultat: = TStringList. Skapa; för idx: = 0 till -1 + forms.längd doBörja form: = forms.item (idx, 0) som IHTMLFormElement; resultat. Lägg till (form.name); slutet; slutet; 

En enkel användning för att visa listan över webbformulärnamn i en TMemo:

var former: TStringList; Börja former: = WebFormNames (WebBrowser1.Document SOM IHTMLDocument2); Prova memo1.Lines. Tilldela (formulär); till sist former. Fri; slutet; slutet; 

Så här gör du få förekomsten av ett webbformulär per index. För en enda formsida skulle indexet vara 0 (noll).

fungera WebFormGet (const formNumber: heltal; const dokument: IHTMLDocument2): IHTMLFormElement; var formulär: IHTMLElementCollection; Börja formulär: = dokument. formulär som IHTMLElementCollection; resultat: = former. Objekt (formNumber, '') som IHTMLFormElement. slutet; 

När du väl har webbformuläret kan du göra det lista alla HTML-inmatningselement med deras namn, du kan få eller ställa in värdet för vart och ett av fältenoch slutligen kan du skicka in webbformuläret.

Webbsidor kan vara värd för webbformulär med inmatningselement som redigeringsrutor och rullgardinslistor som du kan kontrollera och manipulera programmatiskt från Delphi-kod.

När du väl har webbformuläret kan du göra det lista alla HTML-inmatningselement med deras namn:

fungera WebFormFields (const dokument: IHTMLDocument2; const formName: sträng): TStringList; var form: IHTMLFormElement; fält: IHTMLElement; fName: string; idx: heltal; Börja form: = WebFormGet (0, WebBrowser1.Document SOM IHTMLDocument2); resultat: = TStringList. Skapa; för idx: = 0 till -1 + formlängd do börja fält: = form.item (idx, '') som IHTMLElement; om fält = noll då Fortsätta; fName: = field.id; om field.tagName = 'INPUT' sedan fName: = (fält som IHTMLInputElement) .name; om field.tagName = 'VÄLJ' sedan fName: = (fält som IHTMLSelectElement) .name; om field.tagName = 'TEXTAREA' sedan fName: = (fält som IHTMLTextAreaElement) .name; resultat. Lägg till (fName); slutet; slutet;

När du vet namnen på fälten på ett webbformulär kan du programmera få värdet för ett enda HTML-fält:

fungera WebFormFieldValue ( const dokument: IHTMLDocument2; const formNumber: heltal; const fält namn: sträng): sträng; var form: IHTMLFormElement; fält: IHTMLElement; Börja form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); fält: = form. Objekt (fältnamn, '') som IHTMLElement; om fält = noll då Utgång; om field.tagName = 'INPUT' sedan resultat: = (fält som IHTMLInputElement) .value; om field.tagName = 'VÄLJ' sedan resultat: = (fält som IHTMLSelectElement) .value; om field.tagName = 'TEXTAREA' sedan resultat: = (fält som IHTMLTextAreaElement) .value; slutet;

Ett exempel på användning för att få värdet på ett inmatningsfält med namnet "URL":

const FIELDNAME = 'url'; var doc: IHTMLDocument2; fieldValue: sträng; Börja doc: = WebBrowser1.Document SOM IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Lägg till ('Fält: "URL", värde:' + fieldValue);slutet;

Hela idén skulle inte ha något värde om du inte skulle kunna fyll i webbformulärelement:

procedur WebFormSetFieldValue (const dokument: IHTMLDocument2; const formNumber: heltal; const fältnamn, nytt värde: sträng); var form: IHTMLFormElement; fält: IHTMLElement; Börja form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); fält: = form. Objekt (fältnamn, '') som IHTMLElement; om fält = noll då Utgång; om field.tagName = 'INPUT' sedan (fält som IHTMLInputElement) .value: = newValue; om field.tagName = 'VÄLJ' sedan (fält som IHTMLSelectElement): = newValue; om field.tagName = 'TEXTAREA' sedan (fält som IHTMLTextAreaElement): = newValue; slutet;

Skicka in ett webbformulär

Slutligen, när alla fält manipuleras, skulle du förmodligen skicka webbformuläret från Delphi-koden. Här är hur:

procedur WebFormSubmit ( const dokument: IHTMLDocument2; const formNumber: heltal); var form: IHTMLFormElement; fält: IHTMLElement; Börja form: = WebFormGet (formNumber, WebBrowser1.Document SOM IHTMLDocument2); form.submit; slutet;

Inte alla webbformulär är "öppensinnade"

Vissa webbformer kan vara värd för en captcha-bild för att förhindra att webbsidor manipuleras programmatiskt.

Vissa webbformulär kanske inte skickas in när du "klickar på skicka-knappen". Vissa webbformulär kör JavaScript eller någon annan procedur körs hanteras av "onsubmit" -händelsen på webbformuläret.

Hur som helst kan webbsidor styras programmatiskt, den enda frågan är "hur långt är du beredd att gå?"

instagram story viewer