modulo WWW::Mechanize (perl)

Discussão em 'Dicas e tutoriais' iniciado por kodo no kami, 15 Junho 2019.

  1. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    229
    Sexo:
    Masculino
    Avaliações:
    +303 / -0
    E ae galera beleza? nesse tutorial vamos brincar com o modulo WWW::Mechanize do perl, esse modulo nos permite fazer determinadas requisições em sites, manipular parametros e metodos passados, manipular formularios daquela pagina, manipular os cookies e headers da requisição e etc. Com esse modulo é bastante simples o desenvolvimento de bots, scripts voltados a coleta ou dump de informações em sites, ou simplesmente automatizar um determinado envio de formulario pela web. Normalmente o modulo não vem instalado por padrão, uma das formas de instalar ele é utilizando o CPAN

    Código (Forge Crash):
    sudo perl -MCPAN -e "install WWW::Mechanize"
    com o modulo instalado basta a gente declarar ele no nosso script para começar

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;
    agora podemos instanciar um objeto desse modulo, no caso WWW::Mechanize

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    com o objeto instanciado, é possivel fazer uma simples requisição GET em um determinado site usando o metodo get e passando a url como argumeto

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("http://eofclub.in/");
    para exibir a resposta usamos o metodo content

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("http://eofclub.in/");
    print $kodo->content;
    [​IMG]

    usando regex podemos recortar trechos especificos e montar a saida como a gente desejar

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://steamcommunity.com/id/$ARGV[0]");

    my @mensagem = $kodo->content =~ /meta name="Description" content="(.*?)"/si;
    my @amigos = $kodo->content =~ /friendBlockContent">(.*?)<br>/gis;
    my @online = $kodo->content =~  />Last Online (.*?)</si;

    print "
    [--- STEAM ---]\nsteam id: $ARGV[0]\n" .
       "
    online: $online[0]\n\n" .
       "
    [--- Mensagem Perfil ---] \n$mensagem[0]" .
       "
    \n\n[--- Amigos ---] \n";
    foreach my $a(@amigos){
       $a =~ s/\n//gs;
       $a =~ s/\x09//gs;
       print $a . "
    \n";
    }
    [​IMG]

    é possivel retornar o codigo de status usando o metodo status (passamos o autocheck para o objeto para continuar executando mesmo com o erro)

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize(autocheck=>0);
    $kodo->get("http://google.com..br/");
    print "codigo: " . $kodo->status . "\n";

    if($kodo->status == 200){
       print "tudo sussa!!! \n";
    }
    else{
       print "vish deu ruim \n";
    }
     
    com o metodo uri retornamos a url atual

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize(autocheck=>0);
    $kodo->get("https://dolarhoje.com/bitcoin-hoje/");
    print $kodo->uri . "\n";
     
    com o metodo links é possivel retornar todos os links daquela pagina como uma array, podemos utilizar o parametro url para especificar as urls dos links e o parametro text para os textos naqueles links

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://pt.wikipedia.org/wiki/Perl");

    my @links = $kodo->links;

    foreach my $l(@links){
       print $l->text . "\n";
       print $l->url . "\n";
       print "=========================\n";
    }
    [​IMG]

    o metodo images retornamos as imagens da pagina

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://www.facebook.com/forumeof");

    my @img = $kodo->images;

    foreach my $i(@img){
       print $i->url . "\n\n";
    }
    para retornar informações dos formularios naquela pagina usamos o metodo forms, podemos usar alguns parametros como o action para onde sera redirecionado aquele formulario, o method sendo o metodo usado

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://youtube.com");

    my @formulario = $kodo->forms;

    foreach my $f(@formulario){
       print $f->action . "\n";
       print $f->method . "\n";
       print "------------------\n";
    }
    podemos usar o metodo inputs no exemplo anterior para retornar todos os inputs de cada formulario, com o paremetro type retornamos o tipo de input (text, password, hidden, button e etc), com o parametro name retornamos o name que sera passado, com o parametro text o texto no input, com o parametro value o valor pre-definido dele

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://youtube.com");

    my @formulario = $kodo->forms;
    my @inputs;
    my $i;

    foreach my $f(@formulario){
       print $f->method . ": " . $f->action . "\n";
       print  . "\n\n";
       @inputs = $f->inputs;
       
       foreach $i(@inputs){
         print "----------\n";
         print "type: " . $i->type . "\n";
         print "name: " . $i->name . "\n";
         print "text: " . $i->name . "\n";
         print "value: " . $i->value . "\n";
         print "----------\n";
       }
       print "\n===========================\n";
    }
    [​IMG]

    o submit_form é um dos metodos para preencher o formulario e depois enviar ele, para a gente usar esse metodo fazemos o request na pagina que tem esse formulario e depois usamos o metodo passando os parametros, sendo o form_number seguido da ordem daquele formulario e fields com os campos do formulario (no caso os inputs)

    Código (Forge Crash):

    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://youtube.com");

    $kodo->submit_form(
       form_number => 2,
       fields => {
         search_query => "kodo no kami"
       }
    );

    print $kodo->uri . "\n";
    o exemplo anterior tambem seria possivel via get direto pela propria url

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://www.youtube.com/results?search_query=kodo+no+kami");
    tambem podemos usar o submit_form para enviar via POST ou usar o proprio metodo post (o metodo post é bem interessante a gente aprender a fazer ja que boa parte dos logins são feitos por ele)

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;

    #autentica no meu roteador
    $kodo->post("http://192.168.1.254/login.cgi",[username=>"admin",password=>"minhawaifu","submit.htm?login.htm"=>"send"]);

    #pula para pagina principal depois de logado
    $kodo->get("index.htm")
    print $kodo->content;
     
    podemos salvar a pagina normalmente abrindo um arquivo e escrevendo a requisição nele (podemos salvar qualquer tipo de arquivo não apenas as pagias html)

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://eofclub.in/download/EOFbookAsm.pdf");

    open(KARQ,">asm.pdf");
    print KARQ $kodo->content;
    close(KARQ);
    uma forma mais simples de salvar é usando o metodo save_content

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->get("https://eofclub.in/download/EOFbookAsm.pdf");
    $kodo->save_content("asm.pdf");
    usando o metodo agent podemos especificar um User-Agent

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->agent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36");
    $kodo->get("https://google.com.br");
     
    é possivel utilizar proxy bastando atribuir ele ao metodo proxy

    Código (Forge Crash):
    #!/usr/bin/perl

    use WWW::Mechanize;

    my $kodo = new WWW::Mechanize;
    $kodo->proxy(["http","https"],"http://108.61.186.207:8080");
    $kodo->get("http://ip-api.com/json/");
    print $kodo->content . "\n";
    [​IMG]

    bom galera isso é apenas um pequeno tutorial desse grande modulo, existem muitas outras funcionalidade que podem ser feitas com esse modulo \o

    by kodo no kami
     
    • Útil Útil x 2
    • Top Top x 1

Compartilhe esta Página