Jump to content
kodo no kami

[tutorial] modulo WWW::Mechanize

Recommended Posts

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

sudo perl -MCPAN -e "install WWW::Mechanize"

com o modulo instalado basta a gente declarar ele no nosso script para começar

#!/usr/bin/perl
	use WWW::Mechanize;

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

#!/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

#!/usr/bin/perl
	use WWW::Mechanize;
	my $kodo = new WWW::Mechanize;
$kodo->get("http://eofclub.in/");

para exibir a resposta usamos o metodo content

#!/usr/bin/perl
	use WWW::Mechanize;
	my $kodo = new WWW::Mechanize;
$kodo->get("http://eofclub.in/");
print $kodo->content;

Jj1CIxA.png

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

#!/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";
}

uXatz0H.png

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

#!/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

#!/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

#!/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";
}

KpCsFlT.png

o metodo images retornamos as imagens da pagina

#!/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

#!/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

#!/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";
}

qZPV4KH.png

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)

#!/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

#!/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)

#!/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)

#!/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

#!/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

#!/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

#!/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";

kwYgYQK.png

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.