Wypełniaj / przesyłaj formularze za pomocą „TWebBrowser” w Delphi

click fraud protection

The TWebBrowser Kontrola Delphi zapewnia dostęp do funkcji przeglądarki internetowej z aplikacji Delphi - w celu umożliwienia tworzenia spersonalizowanej sieci przeglądanie aplikacji lub w celu dodania możliwości przeglądania Internetu, przeglądania plików i sieci, przeglądania dokumentów i pobierania danych Aplikacje.

Formularze internetowe

ZA formularz internetowy lub a formularz na stronie internetowej umożliwia odwiedzającemu stronę internetową wprowadzenie danych, które w większości przypadków są wysyłane na serwer w celu przetworzenia.

Najprostszy formularz internetowy może się składać z jednego element wejściowy (edycja kontroli) i a Zatwierdź przycisk. Większość wyszukiwarek internetowych (takich jak Google) używa takiego formularza internetowego, aby umożliwić Ci wyszukiwanie w Internecie.

Bardziej złożone formularze internetowe obejmują listy rozwijane, pola wyboru, przyciski opcji itp. Formularz internetowy jest podobny do standardowego formularza systemu Windows z funkcjami wprowadzania tekstu i wyboru.

instagram viewer

Każdy formularz zawiera przycisk - przycisk przesyłania - który informuje przeglądarkę o konieczności podjęcia działania w formularzu internetowym (zazwyczaj w celu wysłania go na serwer internetowy w celu przetworzenia).

Programowo wypełnianie formularzy internetowych

Jeśli w aplikacji komputerowej używasz TWebBrowser do wyświetlania stron internetowych, możesz programowo kontrolować formularze internetowe: manipulować, zmieniać, wypełniać, wypełniać pola formularza internetowego i przesyłać go.

Oto zbiór niestandardowych funkcji Delphi, których możesz użyć, aby wyświetlić listę wszystkich formularzy internetowych na stronie internetowej, pobrać elementy wejściowe, programowo wypełnić pola i ostatecznie przesłać formularz.

Aby łatwiej podążać za przykładami, załóżmy, że istnieje formant TWebBrowser o nazwie „WebBrowser1” w formularzu Delphi (standardowy Windows).

Uwaga: należy dodać mshtml do klauzuli użytkownika w celu skompilowania metod wymienionych tutaj.

Wyświetl listę nazw formularzy internetowych, uzyskaj formularz internetowy według indeksu

Strona internetowa w większości przypadków ma tylko jeden formularz internetowy, ale niektóre strony internetowe mogą mieć więcej niż jeden formularz internetowy. Oto jak uzyskać nazwy wszystkich formularzy internetowych na stronie internetowej:

funkcjonować WebFormNames (const dokument: IHTMLDocument2): TStringList; var formularze: IHTMLElementCollection; formularz: IHTMLFormElement; idx: liczba całkowita; zaczynać formularze: = dokument. Formularze jako IHTMLElementCollection; wynik: = TStringList. Stwórz; dla idx: = 0 do -1 + form. Długość robićzaczynać form: = forms.item (idx, 0) as IHTMLFormElement; wynik. Dodaj (form.name); koniec; koniec; 

Proste użycie do wyświetlenia listy nazw formularzy internetowych w TMemo:

var formy: TStringList; zaczynać form: = WebFormNames (WebBrowser1.Document TAK JAK IHTMLDocument2); próbować memo1.Lines. Przypisz (formularze); Wreszcie formy. Darmowy; koniec; koniec; 

Oto jak to zrobić pobierz instancję formularza internetowego przez indeks. Dla strony o jednym formularzu indeks wynosiłby 0 (zero).

funkcjonować WebFormGet (const formNumber: liczba całkowita; const dokument: IHTMLDocument2): IHTMLFormElement; var formularze: IHTMLElementCollection; zaczynać formularze: = dokument. Formularze tak jak IHTMLElementCollection; wynik: = formularze. Element (formNumber, '') tak jak IHTMLFormElement. koniec; 

Po uzyskaniu formularza internetowego możesz wyświetl wszystkie elementy wejściowe HTML według ich nazwy, możesz pobierz lub ustaw wartość dla każdego polai wreszcie możesz prześlij formularz internetowy.

Strony internetowe mogą obsługiwać formularze internetowe z elementami wejściowymi, takimi jak pola edycji i listy rozwijane, którymi można sterować i programowo manipulować z kodu Delphi.

Po uzyskaniu formularza internetowego możesz wyświetl wszystkie elementy wejściowe HTML według ich nazwy:

funkcjonować WebFormFields (const dokument: IHTMLDocument2; const Nazwa formularza: strunowy): TStringList; var formularz: IHTMLFormElement; dziedzina: IHTMLElement; fName: string; idx: liczba całkowita; zaczynać form: = WebFormGet (0, WebBrowser1.Document TAK JAK IHTMLDocument2); wynik: = TStringList. Stwórz; dla idx: = 0 do -1 + forma. Długość robić pole początkowe: = form.item (idx, '') jako IHTMLElement; gdyby pole = zero wtedy Kontyntynuj; fName: = field.id; gdyby field.tagName = 'INPUT' następnie fName: = (pole tak jak IHTMLInputElement) .name; gdyby field.tagName = 'SELECT' następnie fName: = (pole tak jak IHTMLSelectElement) .name; gdyby field.tagName = 'TEXTAREA' następnie fName: = (pole tak jak IHTMLTextAreaElement) .name; wynik. Dodaj (fName); koniec; koniec;

Kiedy znasz nazwy pól w formularzu internetowym, możesz programowo uzyskać wartość dla pojedynczego pola HTML:

funkcjonować WebFormFieldValue ( const dokument: IHTMLDocument2; const formNumber: liczba całkowita; const Nazwa pola: strunowy): strunowy; var formularz: IHTMLFormElement; dziedzina: IHTMLElement; zaczynać form: = WebFormGet (formNumber, WebBrowser1.Document TAK JAK IHTMLDocument2); pole: = formularz. Pozycja (fieldName, '') jako IHTMLElement; gdyby pole = zero wtedy Wyjście; gdyby field.tagName = 'INPUT' następnie wynik: = (pole tak jak IHTMLInputElement) .value; gdyby field.tagName = 'SELECT' następnie wynik: = (pole tak jak IHTMLSelectElement) .value; gdyby field.tagName = 'TEXTAREA' następnie wynik: = (pole tak jak IHTMLTextAreaElement) .value; koniec;

Przykład użycia, aby uzyskać wartość pola wejściowego o nazwie „URL”:

const FIELDNAME = „url”; var doc: IHTMLDocument2; wartość pola: strunowy; zaczynać doc: = WebBrowser1.Document TAK JAK IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Dodaj („Pole:„ URL ”, wartość:„ + fieldValue);koniec;

Cały pomysł nie miałby żadnej wartości, gdybyś nie był w stanie wypełnij elementy formularza internetowego:

procedura WebFormSetFieldValue (const dokument: IHTMLDocument2; const formNumber: liczba całkowita; const fieldName, newValue: strunowy); var formularz: IHTMLFormElement; dziedzina: IHTMLElement; zaczynać form: = WebFormGet (formNumber, WebBrowser1.Document TAK JAK IHTMLDocument2); pole: = formularz. Element (nazwa pola, '') tak jak IHTMLElement; gdyby pole = zero wtedy Wyjście; gdyby field.tagName = 'INPUT' następnie (pole tak jak IHTMLInputElement) .value: = newValue; gdyby field.tagName = 'SELECT' następnie (pole tak jak IHTMLSelectElement): = newValue; gdyby field.tagName = 'TEXTAREA' następnie (pole tak jak IHTMLTextAreaElement): = newValue; koniec;

Prześlij formularz internetowy

Na koniec, gdy wszystkie pola zostaną zmanipulowane, prawdopodobnie będziesz chciał przesłać formularz internetowy z kodu Delphi. Oto jak:

procedura WebFormSubmit ( const dokument: IHTMLDocument2; const formNumber: integer); var formularz: IHTMLFormElement; dziedzina: IHTMLElement; zaczynać form: = WebFormGet (formNumber, WebBrowser1.Document TAK JAK IHTMLDocument2); form.submit; koniec;

Nie wszystkie formularze internetowe są „otwarte”

Niektóre formularze internetowe mogą zawierać obraz captcha, aby zapobiec programowej manipulacji stronami internetowymi.

Niektóre formularze internetowe mogą nie zostać przesłane po „kliknięciu przycisku przesłania”. Niektóre formularze internetowe wykonują JavaScript lub inna procedura jest obsługiwana przez zdarzenie „onsubmit” formularza internetowego.

W każdym razie stronami internetowymi można sterować programowo, jedyne pytanie brzmi: „jak daleko jesteś przygotowany?”

instagram story viewer