[Cascavel-pm] WWW::Mechanize

BOO mayakuuri em bol.com.br
Sábado Fevereiro 3 09:45:37 PST 2007


Olá,

Não te deixa intimidar pelos Java Script...
Alguns monges aqui da lista parecem saber como se faz/implementa um 
interpretador de JS (tem módulos prontos, inclusive), mas acho que não 
será necessário... Eu pelo menos nunca precisei chegar nesse nível...
Seguido eu faço spiders que precisam pegar os dados dos links que sao 
definidos como JS...
Na prática, geralmente os JS fazem uma pequena substituição de valores 
(mascaramento ou limpeza dos dados que o usuário entrou), algumas 
validações pra saber se o usuário entrou com algo coerente e 
posteriormente eles disparam um submit num dos forms do HTML...
Assim, procura entender o que este link com JS está tentando fazer e 
depois apenas replica isso...
Só é realmente um problema (mas não impossível) quando se trata de um 
Applet... Mas quando eu só JS (mesmo que seja com AJAX) é trivial de 
interpretar e burlar os JS...
Tenho alguma experiência em tratar JS e depois simular o que eles fazem 
com o Mechanize ou LWP... Assim,
se mesmo assim tu continuar "apanhando" pro JS ai, salva os HTML e os 
javascripts que ele importa, zipa tudo e me manda como anexo que eu te 
ajudo na boa...
O importante é ser perseverante e procurar entender como resolver o 
problema ao invés de ficar tentando achar soluções mágicas (como wget, 
que eh bom horrores, mas pra isso nem sempre serve) e ajuda aqui na 
lista é o que não vai faltar, pois ta cheio de monges aqui que jah devem 
ter feito inumeros sistemas similares a esse que tu ta fazendo...
Uma outra pequena dica que te dou para debulhar JS nas páginas é usar 
Firefox e as extensões Web Developer 1.0.2,
Firebug (de preferência a última versão) e Greasemonkey. Com essas 
extensões fica palhaçada debugar os JS das páginas e até mesmo 
modifica-los em runtime...
É isso, desculpa por esse monólogo gigantesco, mas espero ter ajudado. :)

Abraço.

Igor Garcia


vict0r wrote:
> Igor,
> muito obrigado pela resposta.
> Eu tenho módulos em desenvolvimento para administrar e monitorar os
> roteadores e switches de diversos fabricantes, q costumam fazer isso
> extraindo informações através de comandos no próprio terminal,
> especificamente este se refere a um switch de conteúdo Alteon que eu
> preciso extrair relatórios de estado de diversos servidores que
> possuem tráfego balanceado por este equipamento, mas não fiquei
> satisfeito com o q consegui através dos comandos disponíveis e resolvi
> usar uma estratégia diferente, descobri q através da interface web
> dele é possível gerar os relatórios q eu preciso já prontinhos.
> A minha idéia então era executar essas chamadas via web e obter os relatórios.
> Depois eu vi q não conseguiria com o wget pq se trata de uma interface
> em Javascript, e os relatórios são gerados por chamadas, e agora não
> tenho certeza se conseguirei em perl tb, pois preciso executar essas
> chamadas remotamente, e não tenho as API's dessa interface web em Java
> pra isso..
> A solução q estou conseguindo implementar com sucesso agora é extrair
> localmente as informações q preciso do arquivo de salva da
> configuração do equipamento, que é um dump de tudo q está configurado
> nele, exportado via tftp por outro módulo já em produção, mas terei q
> correlacionar os dados e formatar o relatório.
> Em um primeiro momento será uma salva local para envio por email, mas
> a idéia é depois popular o banco.
> Os relatórios são gerados em html, e o número de links depende do
> tamanho do relatório.
> Bom, acho q é isso. :-)
>
> Agradeço a ajuda de todos, e na segunda vou testar a sua dica.
> Abração.
>
> On 2/2/07, BOO <mayakuuri em bol.com.br> wrote:
>   
>> Olá vict0r,
>>
>> Acho que o problema é que tu não definiu onde guardar cookies e não
>> passou as credenciais...
>> Tenta algo tipo:
>>
>> <code>
>>
>> use strict;
>> use warnings;
>> use Carp qw(croak);
>> use WWW::Mechanize;
>>
>> my $web = WWW::Mechanize->new(timeout => 30);
>>
>> my $url = "http://10.0.1.2";
>>
>> ######## ACHO QUE FOI ISSO QUE FALTOU ########
>>
>> $web->cookie_jar({ file => "./.cookies.txt" });
>> $web->credentials('vict0r', 'senha_do_vict0r');
>>
>> ########################################
>>
>> my $ret = $web->get($url);
>>
>> if ($ret->code != 200){
>>   croak "Deu algo errado... Poste isso em cascavel-pm para ser ajudado !";
>> }
>>
>> my $html = $ret->content;
>>
>> faz_algo_que_preste_com($html);
>>
>> </code>
>>
>>
>> Bem, isso não responde completamente a tua pergunta, pois faltam
>> elementos importantes...
>>
>> 1) Tu ta usando que tipo de autenticação (form+sessão, basic, digest,
>> session-token, et cetera) ?
>> 2) Precisa gravar o que foi coletado em disco ou vai passar para um
>> banco de dados ?
>> 3) Qual o nível de recursividade para ir seguindo os links ?
>> 4) Qualé o propósito principal do script que tu queres desenvolver ?
>>
>> Por favor, responda essas perguntas e poste novos problemas que tu
>> esteja tendo para que possamos
>> te ajudar melhor, ok ?
>>
>> Abraço.
>>
>> Igor Garcia
>>
>>
>> vict0r wrote:
>>     
>>> Srs.,
>>> gostaria de pedir a ajuda de vocês se possível.
>>> Preciso fazer o download de páginas HTML incluindo seus links
>>> internos, essa páginas estão em um servidor web de um switch da minha
>>> rede, portanto terei que autenticar para ter acesso.
>>> Pesquisei no cpan e encontrei o modulo WWW::Mechanize, que parece
>>> fazer o q preciso, incluindo autenticação e follow_link.
>>> Gostaria de saber se essa é a melhor opção nesse caso, pois escrevi um
>>> pequeno script só pra testar as funções do módulo e estou tendo
>>> problemas.
>>> ####
>>> #!/usr/bin/perl
>>>
>>>
>>> use WWW::Mechanize;
>>>
>>> my $mech = WWW::Mechanize->new();
>>> my $url = http://10.0.1.2;
>>> $mech->get( $url );
>>> my $res = $mech->status();
>>> print "$res\n";
>>> ####
>>>
>>> Retorno: 501
>>>
>>> Se tentar usar outros métodos diferentes do status(), o resultado é sempre:
>>>
>>> 501 Protocol scheme ' ' is not supported
>>>
>>> Está parecendo q falta algum parâmetro, alguém saberia dizer ?
>>>
>>> Obrigado.
>>> _______________________________________________
>>> Cascavel-pm mailing list
>>> Cascavel-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>
>>>
>>>       
>> _______________________________________________
>> Cascavel-pm mailing list
>> Cascavel-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>
>>     
>
>
>   



Mais detalhes sobre a lista de discussão Cascavel-pm