Dica: Atribuir valores a input do WebBrowser
Delphi, Win32 April 7th, 2009Pessoal, boa noite!
Na dica de hoje iremos aprender como jogar valores para “inputs” dentro de um WebBrowser.
Imagine a seguinte situação (real): seu cliente solicita que seja efetuada a consulta de um determinado CNPJ no SINTEGRA de São Paulo, para um CNPJ conhecido pelo sistema? A principio você criaria uma novo form com o componente WebBrowser acessando a página solicitada:
WebBrowser.Navigate(’http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/sintegra.html’)
Agora, como atribuir o CNPJ e Insc.Estadual nos devidos campos?
Com esse código você fará isso facilmente.
No evento onDocumentComplete do WebBrowser você implemente:
var
FormItem: Variant;
Field: Variant;
FieldName: String;
I,J: Integer;
begin
if WebBrowser.OleObject.Document.all.tags(’FORM’).Length = 0 then
Exit;
for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser.OleObject.Document.forms.Item(I);
try
for j := 0 to FormItem.Length - 1 do
begin
//Identifica o campo e seu nome no formulário
Field := FormItem.Item(j);
FieldName := Field.Name;
if FieldName = ‘cnpj’ then // nome do input para o campo CNPJ
Field.Value := edtCNPJ.Text;
if FieldName = ‘ie’ then // nome do input para o campo Inscr.Estadual
Field.Value := edtIE.Text;
end
except
ShowMessage(’Não foi possível identificar os campos para atribuir os valores de CNPJ e IE’);
end;
end;
end
Uma observação, para a atribuição no campo, você precisará identificar o ID do input na página.
Abraços e até a próxima
May 12th, 2009 at 23:20
Ola, achei a dica muito interessante.
Faltou apenas um detalhe, que seria localizar o botao de culsulta e simular o presionamento da tecla para que quando for realizar a consulta a pagina jã apareca preenchida, sem a necessidade de clicar no botao.
July 2nd, 2009 at 15:35
Márcio,
Obrigado pela sua opnião, em breve farei um complemento a esse post direcionado a sua sugestão.
Obrigado
Daniel Buona
October 3rd, 2009 at 13:59
Boa Tarde Daniel. Achei sua dica muito boa. Estou com o controle funcionando aqui com exceção da parte em que ele preenche automaticamente. Coloquei a rotina no Evento OnDocumentComplet do webbrowser mas o aplicativo sempre tenta preencher os campos antes da pagina carregar por completo. Estou utilizando um button pra preencher assim que carrega. Você tem como me passar mais uma dica sobre isso? Obrigado!
October 9th, 2009 at 17:09
Mauricio, coloca teu código de preenchimento dos campos no evento OnDownloadComplete que vai funcionar.
Quanto ao click em um botão é só percorrer até achar o botão, da mesma forma que foi feito pros campos cnpj e ie, e executar o click.
Assim:
if FormItem.Item(j).Name = ‘Enviar’ then
FormItem.Item(j).Click;
October 20th, 2009 at 09:43
Ótima dica! ja estou utilizando esse controle, funcionou direitinho. Obrigado!
January 12th, 2010 at 15:36
Obrigado pela dica, a principio funcionou bem para o que preciso, no entanto como faria para aplicar o mesmo principio para coletar os dados da NFe, uma vez que a pagina esta dividida por “abas”, gostaria que o meu sistema abra o site da consulta da receita referente a Nfe, preencha automaticamente o campo contendo a chave da nfe, sobrando apenas para o usuário que digite o valor da imagem, e apartir as informações de todas as abas sejma “transportadas” para uma base de dado.
Obrigado
January 29th, 2010 at 16:56
Precisaria de um exemplo mais claro com relacao ao nfe, pois possue um form com abas e tenho que expandir , ecomo poderia descarregar as informacoes completas dos produtos
May 19th, 2010 at 19:09
ele dá um erro na linha:
if WebBrowser.OleObject.Document.all.tags(’FORM’).Length = 0 then
dizendo que: [Pascal Fatal Error] CLIENTES.pas(1755): F2084 Internal Error: AV22001289-R0000E280-0
que não reconheçe o termo FORM
me ajudem por favor
May 19th, 2010 at 19:51
Descupem, mais estou começando em Delphi, como faz para identificar o ID do input na página ???