Como faço para obter o texto-formulário de código de verificação quando da realização de auto de acesso do site em Perl?

StackOverflow https://stackoverflow.com/questions/2331956

Pergunta

Eu estou brincando com o Win32::IE:Mechanize para tentar acessar alguns de autenticação necessário sites automaticamente.Até agora eu tenho alcançado sucesso moderado, por exemplo, eu posso fazer logon automaticamente no meu yahoo caixa de correio.Mas eu encontrar muitos sites estão usando algum tipo de imagem mecanismo de verificação, que é, possivelmente chamado de CAPTCHA.Que eu possa fazer nada para eles.Mas um dos sites que eu estou tentando acessar automaticamente está usando um texto simples código de verificação.É comnposed de quatro dígitos, selecionável e copiáveis.Mas eles não estão no arquivo de origem, que pode ser obtida usando

$mech->content;

Procurei a palavra-chave que aparece na página da web, mas não no arquivo de origem através de todos os arquivos no Arquivos Temporários da Internet, mas não consegue encontrá-lo.

Alguma idéia do que está acontecendo?Eu estava suspeitando que o código de verificação foi, de alguma forma, escondida em algum arquivo de cookie, mas não consigo encontrá-la :(

A seguir está o código que preenche todos os campos requisitos, exceto para o código de verificação:

use warnings;
use Win32::IE::Mechanize;

my $url = "http://www.zjsmap.com/smap/smap_login.jsp";
my $eccode = "myeccode";
my $username = "myaccountname";
my $password = "mypassword";
my $verify = "I can't figure out how to let the script get the code yet"

my $mech = Win32::IE::Mechanize->new(visible=>1);
$mech->get($url);
sleep(1); #avoids undefined value error
$mech->form_name("BaseForm");
$mech->field(ECCODE => $eccode);
$mech->field(MEMBERACCOUNT => $username);
$mech->field(PASSWORD => $password);
$mech->field(verify => $verify);
$mech->click();

Como sempre, todas as sugestões/comentários seria muito apreciado :)

ATUALIZAÇÃO

Eu descobri um não-tão-de maneira inteligente para resolver este problema.Por favor, comente sobre a minha própria asnwer postado abaixo.Obrigado, como sempre :)

Foi útil?

Solução 4

Graças a james2vegas, zoul e Shoban.

Eu finalmente descobri no meu próprio, um não-tão-inteligente, mas no mínimo viável para resolver o problema que eu descrevi aqui.Eu gostaria de compartilhar aqui.Eu acho que a abordagem sugerida por @james2vegas é, provavelmente, muito melhor...mas de qualquer forma eu estou aprendendo ao longo do caminho.

Minha abordagem é este:

Embora o código de verificação não está no arquivo de origem, mas como ainda é selecionável e copiáveis, eu posso deixar o meu script de cópia de tudo na página de início de sessão e, em seguida, extrair o código de verificação.

Para fazer isso, eu uso o sendkeys funções do Win32::Guitest módulo para fazer a "Selecionar Tudo" e "Copiar" para a página de login.

Em seguida, eu uso Win32:área de Transferência para obter o conteúdo da área de transferência e, em seguida, Regexp para extrair o código.Algo como isto:

$verify = Win32::Clipboard::GetText();
$verify =~ s/.* (\d{4}).*/$1/msg;

Alguns pensamentos:

O número aleatório é gerado por algo como isto em Perl meu $random_number = int(rand(8999)) + 1000;#var random_number = rand(1000,10000);E, em seguida, ele verifica se $verifique == $random_number.Eu não sei como pegar o valor de uma sessão-apenas r $random_number.Eu acho que é armazenado na memória.Se eu posso capturar o valor diretamente, então eu não teria ido para o problema de usar este módulo extra.

Outras dicas

Esta é a razão por que eles estão lá.Para parar o programa como a sua para fazer automatizada coisas ;-)

Um CAPTCHA ou Captcha é um tipo de desafio-resposta de ensaio utilizado na computação para garantir que a resposta não é gerado por um computador.

Este parece ser um irrelevantes número.A página utiliza-lo em 3 lugares:a geram;apresentar no formulário ao lado do campo de entrada para ele;e verificando o valor de entrada a ser igual ao número aleatório escolhido.Que é, ele é um cliente de seleção.Ainda assim, se você desabilitar o javascript parece, eu estou supondo, importante cookies não ficar definido.Se você pode executar o JavaScript no contexto da página (você deve ser capaz de com um método de obter a chamada e um javascript URI), você pode alterar o valor da random_number para f.e.42 e preenchimento no formulário.

O código é inserido por JavaScript – desativar JS, recarregue a página e vê-lo desaparecer.Você tem que caçar através do código JS para ter uma idéia de onde ele vem e como replicá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top