Preencher / Enviar formulários usando 'TWebBrowser' no Delphi

click fraud protection

o TWebBrowser O controle Delphi fornece acesso à funcionalidade do navegador da Web a partir de seus aplicativos Delphi - para permitir que você crie uma Web personalizada aplicativo de navegação ou para adicionar recursos de navegação na Internet, arquivos e rede, visualização de documentos e download de dados ao seu formulários.

Formulários da Web

UMA formulário da web ou um formulário em uma página da web permite que um visitante da página da Web insira dados que, na maioria dos casos, são enviados ao servidor para processamento.

O formulário da Web mais simples pode consistir em um elemento de entrada (controle de edição) e um enviar botão. A maioria dos mecanismos de pesquisa na Web (como o Google) usa esse formulário da Web para permitir que você pesquise na Internet.

Formulários da Web mais complexos incluem listas suspensas, caixas de seleção, botões de opção etc. Um formulário da Web é muito parecido com um formulário padrão do Windows com controles de entrada e seleção de texto.

instagram viewer

Todo formulário incluiria um botão - um botão de envio - que informa ao navegador para executar uma ação no formulário da Web (normalmente para enviá-lo a um servidor da Web para processamento).

Preenchendo programaticamente formulários da Web

Se em seu aplicativo da área de trabalho você usar o TWebBrowser para exibir páginas da Web, poderá controlar programaticamente os formulários da Web: manipular, alterar, preencher, preencher os campos de um formulário da Web e enviá-lo.

Aqui está uma coleção de funções Delphi personalizadas que você pode usar para listar todos os formulários da Web em uma página da Web, recuperar elementos de entrada, preencher campos de forma programática e finalmente enviar o formulário.

Para seguir mais facilmente os exemplos, digamos que exista um controle TWebBrowser chamado "WebBrowser1" em um formulário Delphi (Windows padrão).

Nota: você deve adicionar mshtml à sua cláusula de usos para compilar os métodos listados aqui.

Listar nomes de formulários da Web, obter um formulário da Web por índice

Uma página da Web, na maioria dos casos, teria apenas um formulário da Web, mas algumas páginas da Web podem ter mais de um formulário da Web. Veja como obter os nomes de todos os formulários da Web em uma página da Web:

função WebFormNames (const documento: IHTMLDocument2): TStringList; var formulários: IHTMLElementCollection; formulário: IHTMLFormElement; idx: inteiro; início forms: = documento. Formulários como IHTMLElementCollection; resultado: = TStringList. Crio; para idx: = 0 para -1 + forms.length Fazinício form: = forms.item (idx, 0) como IHTMLFormElement; resultado. Adicionar (form.name); fim; fim; 

Um uso simples para exibir a lista de nomes de formulários da web em um TMemo:

var forms: TStringList; início forms: = WebFormNames (WebBrowser1.Document COMO IHTMLDocument2); experimentar memo1.Lines. Atribuir (formulários); finalmente formulários. Livre; fim; fim; 

Aqui está como obter a instância de um formulário da web por índice. Para uma única página de formulário, o índice seria 0 (zero).

função WebFormGet (const formNumber: inteiro; const documento: IHTMLDocument2): IHTMLFormElement; var formulários: IHTMLElementCollection; início forms: = documento. Formulários Como IHTMLElementCollection; resultado: = formulários. Item (formNumber, '') Como IHTMLFormElement. fim; 

Depois de ter o formulário da Web, você pode listar todos os elementos de entrada HTML pelo nome, você pode obter ou definir o valor para cada um dos campose, finalmente, você pode envie o formulário da web.

As páginas da Web podem hospedar formulários da Web com elementos de entrada, como caixas de edição e listas suspensas, que você pode controlar e manipular programaticamente a partir do código Delphi.

Depois de ter o formulário da Web, você pode listar todos os elementos de entrada HTML pelo nome:

função WebFormFields (const documento: IHTMLDocument2; const Nome do formulario: corda): TStringList; var formulário: IHTMLFormElement; campo: IHTMLElement; fName: string; idx: inteiro; início form: = WebFormGet (0, WebBrowser1.Document COMO IHTMLDocument2); resultado: = TStringList. Crio; para idx: = 0 para -1 + form.length Faz campo begin: = form.item (idx, '') como IHTMLElement; E se campo = nada então Continuar; fName: = field.id; E se field.tagName = 'INPUT' então fName: = (campo Como IHTMLInputElement) .name; E se field.tagName = 'SELECT' então fName: = (campo Como IHTMLSelectElement) .name; E se field.tagName = 'TEXTAREA' então fName: = (campo Como IHTMLTextAreaElement) .name; resultado. Adicionar (fName); fim; fim;

Quando você conhece os nomes dos campos em um formulário da Web, pode programaticamente obtenha o valor para um único campo HTML:

função WebFormFieldValue ( const documento: IHTMLDocument2; const formNumber: inteiro; const fieldName: corda): corda; var formulário: IHTMLFormElement; campo: IHTMLElement; início form: = WebFormGet (formNumber, WebBrowser1.Document COMO IHTMLDocument2); campo: = formulário. Item (fieldName, '') como IHTMLElement; E se campo = nada então Saída; E se field.tagName = 'INPUT' então resultado: = (campo Como IHTMLInputElement) .value; E se field.tagName = 'SELECT' então resultado: = (campo Como IHTMLSelectElement) .value; E se field.tagName = 'TEXTAREA' então resultado: = (campo Como IHTMLTextAreaElement) .value; fim;

Um exemplo de uso para obter o valor de um campo de entrada chamado "URL":

const FIELDNAME = 'url'; var doc: IHTMLDocument2; fieldValue: corda; início doc: = WebBrowser1.Document COMO IHTMLDocument2; fieldValue: = WebFormFieldValue (doc, 0, FIELDNAME); memo1.Lines. Add ('Campo: "URL", valor:' + fieldValue);fim;

A ideia inteira não teria valor se você não pudesse preencher elementos de formulário da web:

procedimento WebFormSetFieldValue (const documento: IHTMLDocument2; const formNumber: inteiro; const fieldName, newValue: corda); var formulário: IHTMLFormElement; campo: IHTMLElement; início form: = WebFormGet (formNumber, WebBrowser1.Document COMO IHTMLDocument2); campo: = formulário. Item (fieldName, '') Como IHTMLElement; E se campo = nada então Saída; E se field.tagName = 'INPUT' então (campo Como IHTMLInputElement) .value: = newValue; E se field.tagName = 'SELECT' então (campo Como IHTMLSelectElement): = newValue; E se field.tagName = 'TEXTAREA' então (campo Como IHTMLTextAreaElement): = newValue; fim;

Enviar um formulário da Web

Finalmente, quando todos os campos são manipulados, você provavelmente deseja enviar o formulário da Web a partir do código Delphi. Aqui está como:

procedimento WebFormSubmit ( const documento: IHTMLDocument2; const formNumber: inteiro); var formulário: IHTMLFormElement; campo: IHTMLElement; início form: = WebFormGet (formNumber, WebBrowser1.Document COMO IHTMLDocument2); form.submit; fim;

Nem todos os formulários da Web são "abertos"

Alguns formulários da Web podem hospedar uma imagem captcha para impedir que as páginas da Web sejam manipuladas programaticamente.

Alguns formulários da web podem não ser enviados quando você "clica no botão enviar". Alguns formulários da Web executam JavaScript ou outro procedimento é executado pelo evento "onsubmit" do formulário da Web.

De qualquer forma, as páginas da web podem ser controladas programaticamente, a única pergunta é "até onde você está preparado para ir?"

instagram story viewer