Заполнение / отправка форм с помощью TWebBrowser в Delphi

TWebBrowser Элемент управления Delphi предоставляет доступ к функциональности веб-браузера из ваших приложений Delphi - чтобы вы могли создавать настраиваемые веб-сайты. просматривать приложение или добавить в Интернет возможности просмотра файлов, файлов и сети, просмотра документов и загрузки данных. Приложения.

Веб-формы

веб-форма или форма на веб-странице позволяет посетителю веб-страницы вводить данные, которые в большинстве случаев отправляются на сервер для обработки.

Простейшая веб-форма может состоять из одного элемент ввода (редактирование управления) и Разместить кнопка. Большинство веб-поисковых систем (например, Google) используют такую ​​веб-форму для поиска в Интернете.

Более сложные веб-формы включают раскрывающиеся списки, флажки, переключатели и т. Д. Веб-форма очень похожа на стандартную форму Windows с элементами управления вводом текста и выбора.

Каждая форма будет содержать кнопку - кнопку отправки - которая указывает браузеру выполнить действие с веб-формой (обычно для отправки ее на веб-сервер для обработки).

instagram viewer

Программно заполненные веб-формы

Если в вашем настольном приложении вы используете TWebBrowser для отображения веб-страниц, вы можете программно управлять веб-формами: манипулировать, изменять, заполнять, заполнять поля веб-формы и отправлять ее.

Вот коллекция пользовательских функций Delphi, которые вы можете использовать для отображения всех веб-форм на веб-странице, для извлечения элементов ввода, для программного заполнения полей и, наконец, для отправки формы.

Чтобы было проще следовать примерам, скажем, есть элемент управления TWebBrowser с именем «WebBrowser1» в форме Delphi (стандартная Windows).

Примечание: вы должны добавить MSHTML в ваше предложение использования для компиляции методов, перечисленных здесь.

Список имен веб-форм, получить веб-форму по индексу

Веб-страница в большинстве случаев имеет только одну веб-форму, но некоторые веб-страницы могут иметь более одной веб-формы. Вот как получить имена всех веб-форм на веб-странице:

функция WebFormNames (Const документ: IHTMLDocument2): TStringList; вар формы: IHTMLElementCollection; форма: IHTMLFormElement; idx: целое число; начать формы: = документ. Формы как IHTMLElementCollection; результат: = TStringList. Создайте; за idx: = 0 в -1 + форм.длина делатьначать form: = forms.item (idx, 0) as IHTMLFormElement; результат. Добавить (form.name); конец; конец; 

Простое использование для отображения списка имен веб-форм в TMemo:

вар формы: TStringList; начать формы: = WebFormNames (WebBrowser1.Document В КАЧЕСТВЕ IHTMLDocument2); пытаться memo1.Lines. Назначить (формы); наконец формы. Свободно; конец; конец; 

Вот как получить экземпляр веб-формы по индексу. Для одной страницы формы индекс будет 0 (ноль).

функция WebFormGet (Const formNumber: целое число; Const документ: IHTMLDocument2): IHTMLFormElement; вар формы: IHTMLElementCollection; начать формы: = документ. формы в качестве IHTMLElementCollection; результат: = формы. Item (formNumber, '') в качестве IHTMLFormElement. конец; 

Когда у вас есть веб-форма, вы можете перечислить все элементы ввода HTML по их названию, вы можете получить или установить значение для каждого из полейи, наконец, вы можете отправить веб-форму.

Веб-страницы могут содержать веб-формы с элементами ввода, такими как поля редактирования и раскрывающиеся списки, которыми вы можете управлять и манипулировать программно из кода Delphi.

Когда у вас есть веб-форма, вы можете перечислить все элементы ввода HTML по их названию:

функция WebFormFields (Const документ: IHTMLDocument2; Const FORMNAME: строка): TStringList; вар форма: IHTMLFormElement; поле: IHTMLElement; fName: строка; idx: целое число; начать form: = WebFormGet (0, WebBrowser1.Document В КАЧЕСТВЕ IHTMLDocument2); результат: = TStringList. Создайте; за idx: = 0 в -1 + длина формы делать поле begin: = form.item (idx, '') как IHTMLElement; если поле = тогда ноль Продолжить; fName: = field.id; если field.tagName = 'INPUT' тогда fName: = (поле в качестве IHTMLInputElement) .name; если field.tagName = 'SELECT' тогда fName: = (поле в качестве IHTMLSelectElement) .name; если field.tagName = 'TEXTAREA' тогда fName: = (поле в качестве IHTMLTextAreaElement) .name; результат. Добавить (fName); конец; конец;

Когда вы знаете имена полей в веб-форме, вы можете программно получить значение для одного поля HTML:

функция WebFormFieldValue ( Const документ: IHTMLDocument2; Const formNumber: целое число; Const FIELDNAME: строка): строка; вар форма: IHTMLFormElement; поле: IHTMLElement; начать form: = WebFormGet (formNumber, WebBrowser1.Document В КАЧЕСТВЕ IHTMLDocument2); поле: = форма. Item (fieldName, '') как IHTMLElement; если поле = тогда ноль Выход; если field.tagName = 'INPUT' тогда результат: = (поле в качестве IHTMLInputElement) .value; если field.tagName = 'SELECT' тогда результат: = (поле в качестве IHTMLSelectElement) .value; если field.tagName = 'TEXTAREA' тогда результат: = (поле в качестве IHTMLTextAreaElement) .value; конец;

Пример использования для получения значения поля ввода с именем «URL»:

Const FIELDNAME = 'url'; вар doc: IHTMLDocument2; fieldValue: строка; начать doc: = WebBrowser1.Document В КАЧЕСТВЕ IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Добавить ('Поле: "URL", значение:' + fieldValue);конец;

Вся идея не будет иметь значения, если вы не сможете заполнить элементы веб-формы:

процедура WebFormSetFieldValue (Const документ: IHTMLDocument2; Const formNumber: целое число; Const fieldName, newValue: строка); вар форма: IHTMLFormElement; поле: IHTMLElement; начать form: = WebFormGet (formNumber, WebBrowser1.Document В КАЧЕСТВЕ IHTMLDocument2); поле: = форма. Item (fieldName, '') в качестве IHTMLElement; если поле = тогда ноль Выход; если field.tagName = 'INPUT' тогда (поле в качестве IHTMLInputElement) .value: = newValue; если field.tagName = 'SELECT' тогда (поле в качестве IHTMLSelectElement): = newValue; если field.tagName = 'TEXTAREA' тогда (поле в качестве IHTMLTextAreaElement): = newValue; конец;

Отправить веб-форму

Наконец, когда все поля обрабатываются, вы, вероятно, захотите отправить веб-форму из кода Delphi. Вот как:

процедура WebFormSubmit ( Const документ: IHTMLDocument2; Const formNumber: целое число); вар форма: IHTMLFormElement; поле: IHTMLElement; начать form: = WebFormGet (formNumber, WebBrowser1.Document В КАЧЕСТВЕ IHTMLDocument2); form.submit; конец;

Не все веб-формы являются «открытыми»

Некоторые веб-формы могут содержать изображение капчи, чтобы предотвратить программные манипуляции с веб-страницами.

Некоторые веб-формы могут не отправляться, когда вы нажимаете кнопку "Отправить". Некоторые веб-формы выполняют JavaScript, или некоторые другие процедуры выполняются обработчиком события «onsubmit» веб-формы.

В любом случае, веб-страницами можно управлять программно, единственный вопрос: «Как далеко вы готовы зайти?»