Como capturar uma imagem exibida num TWebBrowser?
Olá,
No site de consulta pública ao cadastro de contribuinte do ICMS, do estado de São Paulo, existe um mecanismo anti-robô para consultas. A minha idéia para semi-automatizar a consulta seria carregar a url para um webbrowser, capturar ou salvar a imagem de autenticação, apresentá-la em uma outra área e solicitar ao usuário para digitá-la. Com posse dessa chave, posso efetuar a consulta e apresentar o resultado num outro webbrowser e permitir que o usuário salve a consulta.
Como fazer para capturar ou salvar uma determinada imagem (GIF) apresentada por um TWebBrowser?
Nas minhas pesquisas pela net, achei vários exemplos de como salvar a imagem apresentada num webbrowser, bastando utilizar a url de origem da imagem. Porém, nesse caso, sempre que se busca a imagem diretamente pela url de origem, é exibida nova imagem e as letras da mesma não são aceitas na autenticação da consulta.
Utilizei como base de pesquisa o tópico ´como dar enter no webbrowser´ aqui do fórum mesmo na url abaixo:
http://forum.devmedia.com.br/viewtopic.php?t=55935&postdays=0&postorder=asc&start=0
Url para consulta sintegra/icms SP:
http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/sintegra.html
Url para gerar imagem de autenticação:
http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/imageGenerator
procedure Form1.ConsultaInicial;
begin
WebBrowser1.Navigate(´http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/sintegra.html´);
while not (Webbrowser1.ReadyState <> READYSTATE_COMPLETE) do Application.ProcessMessages;
{ rotina para capturar imagem e carregá-la para WebBrowser2 }
// ???
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.OleObject.Document.all.Item(´key´, 0).value := edtChave.text;
WebBrowser1.OleObject.Document.all.Item(´cnpj´, 0).value := ´01545828000945´;
WebBrowser1.OleObject.Document.all.Item(´botao´, 0).Click;
end;
No site de consulta pública ao cadastro de contribuinte do ICMS, do estado de São Paulo, existe um mecanismo anti-robô para consultas. A minha idéia para semi-automatizar a consulta seria carregar a url para um webbrowser, capturar ou salvar a imagem de autenticação, apresentá-la em uma outra área e solicitar ao usuário para digitá-la. Com posse dessa chave, posso efetuar a consulta e apresentar o resultado num outro webbrowser e permitir que o usuário salve a consulta.
Como fazer para capturar ou salvar uma determinada imagem (GIF) apresentada por um TWebBrowser?
Nas minhas pesquisas pela net, achei vários exemplos de como salvar a imagem apresentada num webbrowser, bastando utilizar a url de origem da imagem. Porém, nesse caso, sempre que se busca a imagem diretamente pela url de origem, é exibida nova imagem e as letras da mesma não são aceitas na autenticação da consulta.
Utilizei como base de pesquisa o tópico ´como dar enter no webbrowser´ aqui do fórum mesmo na url abaixo:
http://forum.devmedia.com.br/viewtopic.php?t=55935&postdays=0&postorder=asc&start=0
Url para consulta sintegra/icms SP:
http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/sintegra.html
Url para gerar imagem de autenticação:
http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/imageGenerator
procedure Form1.ConsultaInicial;
begin
WebBrowser1.Navigate(´http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/sintegra.html´);
while not (Webbrowser1.ReadyState <> READYSTATE_COMPLETE) do Application.ProcessMessages;
{ rotina para capturar imagem e carregá-la para WebBrowser2 }
// ???
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.OleObject.Document.all.Item(´key´, 0).value := edtChave.text;
WebBrowser1.OleObject.Document.all.Item(´cnpj´, 0).value := ´01545828000945´;
WebBrowser1.OleObject.Document.all.Item(´botao´, 0).Click;
end;
Softwareman
Curtidas 0
Respostas
Softwareman
03/02/2008
Prezados,
Conseguí resolver a questão sem a necessidade de capturar ou salvar a imagem apresentada no webbrowser1. Apesar de não incluir o momento da carga da imagem para o webbrowser2 na mensagem anterior, nos meus testes sempre o fiz na linha abaixo do webbrowser1 e em momento algum testei como abaixo. Com a alteração, o validador passou a aceitar as letras da nova imagem:
procedure Form1.ConsultaInicial;
begin
WebBrowser1.Navigate(´http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/sintegra.html´);
// Anteriormente, nos meus testes, fazia a carga da imagem aqui:
{ WebBrowser2.navigate(´http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/imageGenerator´); }
while not (Webbrowser1.ReadyState <> READYSTATE_COMPLETE) do Application.ProcessMessages;
// Com a alteração, passei a solicitar a nova imagem após a carga completa da url do webbrowser1
WebBrowser2.navigate(´http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/imageGenerator´);
// Essa imagem carregada após a carga completa de webbrowser1 é aceita normalmente pelo validador do Sintegra
end;
Conseguí resolver a questão sem a necessidade de capturar ou salvar a imagem apresentada no webbrowser1. Apesar de não incluir o momento da carga da imagem para o webbrowser2 na mensagem anterior, nos meus testes sempre o fiz na linha abaixo do webbrowser1 e em momento algum testei como abaixo. Com a alteração, o validador passou a aceitar as letras da nova imagem:
procedure Form1.ConsultaInicial;
begin
WebBrowser1.Navigate(´http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/sintegra.html´);
// Anteriormente, nos meus testes, fazia a carga da imagem aqui:
{ WebBrowser2.navigate(´http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/imageGenerator´); }
while not (Webbrowser1.ReadyState <> READYSTATE_COMPLETE) do Application.ProcessMessages;
// Com a alteração, passei a solicitar a nova imagem após a carga completa da url do webbrowser1
WebBrowser2.navigate(´http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/imageGenerator´);
// Essa imagem carregada após a carga completa de webbrowser1 é aceita normalmente pelo validador do Sintegra
end;
GOSTEI 0
Alexandre
03/02/2008
Olá,
Vi que vc arrumou uma forma de capturar os dados da Consulta Pública do Sintegra automatizada. Poderia me enviar um exemplo para que eu possa estar desenvolvendo em minha aplicação?
Obrigado
Alexandre
alexqueiroz@ig.com.br
Vi que vc arrumou uma forma de capturar os dados da Consulta Pública do Sintegra automatizada. Poderia me enviar um exemplo para que eu possa estar desenvolvendo em minha aplicação?
Obrigado
Alexandre
alexqueiroz@ig.com.br
GOSTEI 0