Dúvida com Mechanize

1. Dúvida com Mechanize

Eduardo
egimenez

(usa Ubuntu)

Enviado em 07/08/2012 - 16:35h

Boa tarde pessoal tudo bem? Sou meio novato em perl já que alguns problemas eu consigo resolver e alguns não. No momento tenho uma dúvida que não sei se é possível ou não resolver, na loja que trabalho eu necessito entrar algumas vezes no site da receita federal para buscar dados de produtos que foram faturados para a gente, pensando no seguinte eu desenvolvi esse script :


#!/usr/bin/perl

use WWW::Mechanize;
use LWP::Simple;
use LWP::UserAgent;

my $receita = "https://nfe.fazenda.sp.gov.br/ConsultaNFe/consulta/publica/ConsultarNFe.aspx";
my $temp = "C:/imagens";
print "Digite a chave da nfe\n";
my $chave = <STDIN>; chomp $chave;
#my chave = "35120354362041000157550010000337091127006860";
&nfe($receita,$chave);


sub nfe() {
my $url = $_[0];
my $key = $_[1];
my $envia = &retorno($url,$key);
print "$envia";
if($envia =~ m/<span
class="linha">535016803110<\/span>/i) {
print "Ok...\n";
}
else {
print "Falhou...\n";
}
}

sub retorno() {
my $link = $_[0];
my $key = $_[1];
my $imagem = $temp."/imagem-".int(rand(10)).".jpg";
my $mech = WWW::Mechanize->new();
my $ret = $mech->get($link);
if($ret->content =~ m/<img src="~(.*)"\s+\/>/i) {
my $img = $1;
print "Baixando imagem... Verificar arquivo $imagem\n";
my $download = getstore($link."~".$img,$imagem);
if(is_success($download)) {
print "Download efetuado com sucesso.\n";
print "Digite as letras da imagem baixada:\n";
my $captcha = <STDIN>; chomp $captcha;
$mech->submit_form(
fields => {
'ctl00$ContentMain$tbxIdNFe' => $key,
'ctl00$ContentMain$tbxCaptcha' => $captcha,
});
$mech->submit('ctl00$ContentMain$btnConsultaCompleta');
return $mech->content;
}
else {
print "Download nao foi concluido\n";
}
}
}

A ideia é que o script preencha os campos do formulário do site conforme o que eu colocar no script, a chave eu consigo preencher porém o site tem o infeliz do captcha para atrapalhar, eu queria saber se alguém sabe como eu posso pular esse captcha ou preenche-lo sem problemas? Para ajudar vocês eu deixei uma chave como linha de comentário, a chave é valida na receita e como return eu deixei uma linha só para fazer o teste se ele passa ou não do form, a conclusão final é que quero fazer um script que preencha os campos e depois com loop ele vai pegar os dados de cada produto para mim e imprimir na tela, o problema é o captcha :/ help me please kkkkk.

Desculpa se postei errado ou cometi algum erro. Obrigado desde já.


  


2. Captcha

Adriano H. Hedler
adrianoh2

(usa Debian)

Enviado em 12/10/2012 - 03:05h

Você tem algumas opções:

Caso você esteja usando um terminal virtual, aberto de um gerenciado de janelas, você pode baixar a imagem, e depois de ler, digitar o código.
Ai é usar qualquer programa para baixar a imagem.
Você precisa baixar esta tag aqui, como imagem.
<img src="~/imagemDinamica.aspx?tmstp=634856041399231622" />
Ela terá este endereço:
https://nfe.fazenda.sp.gov.br/ConsultaNFe/consulta/publica/~/imagemDinamica.aspx?tmstp=6348560318122...
Após finalizar o donwload da página, a imagem já vem junto.
Claro que é dinâmico, cada hora virá com um nome, mas nada que uma expressão regular para matar a charada!
lynx -dump -nolist https://nfe.fazenda.sp.gov.br/ConsultaNFe/consulta/publica/ConsultarNFe.aspx | grep -E '\[imagemDinamica.aspx\?.*]' | sed 's/^[\[ \t]*//' | sed 's/\]//'

Ou usando alguma forma dentro do próprio perl para ao processar a página para salvar tal arquivo.
Caso seja um terminal sem gerenciador gráfico tem algums programas para visualização com frame buffer:
fbi que pode ser baixado pelo apt-get nas distribuições debian.
e http://aa-project.sourceforge.net/aview/ - Não testado.

Espero que de um bom ponta-pé, também fiquei interessado pelo processo.

Até e boa sorte.


3. Re: Dúvida com Mechanize

Daniel Vinciguerra
dvinciguerra

(usa Debian)

Enviado em 03/11/2012 - 09:18h

Ola,

Nesta necessidade a quebra do captcha é a atividade mais complexa que você terá de realizar se quiser a automação completa da sua aplicação.

Note que sua sorte é que este captcha em especial, tem alguns padrões que pude perceber que podem ser usados a seu favor.

1 - Ele não distorce (ao menos não muito) as letras da imagem tornando mais simples uma analise por reconhecimento de padrões.

2 - As letras tem cores diferenciadas do fundo e são bem fortes e vivas, também ajudando no caso de uma analise por reconhecimento de padrões.

3 - Todos os caracteres são minusculos.

Vendo que a parte de HTTP esta tranquila... a minha dica é que você se utilize de modulos como o GD(http://search.cpan.org/~lds/GD-2.46/GD.pm) ou Image::Magick(http://search.cpan.org/~jcristy/PerlMagick-6.77/Magick.pm.in) para manipular a imagem, aplicar os filtros necessários e fazer a analise.

Abraço,






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts