[tutorial] modulo WWW::Mechanize

Postagem de conteúdo sobre programação perl
Post Reply
User avatar
Kodo no Kami
Admin
Admin
Posts: 743
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

[tutorial] modulo WWW::Mechanize

Post by Kodo no Kami » Wed Jun 12, 2019 5:13 pm

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

Code: Select all

sudo perl -MCPAN -e "install WWW::Mechanize"
com o modulo instalado basta a gente declarar ele no nosso script para começar

Code: Select all

#!/usr/bin/perl

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

Code: Select all

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

Code: Select all

#!/usr/bin/perl

use WWW::Mechanize;

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

Code: Select all

#!/usr/bin/perl

use WWW::Mechanize;

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

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

Code: Select all

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

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

o metodo images retornamos as imagens da pagina

Code: Select all

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

Code: Select all

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

Code: Select all

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

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)

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

Code: Select all

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

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
Image

que desagradavel ~ mirai kuriyama

User avatar
51M0N
Admin
Admin
Posts: 880
Joined: Fri Jan 02, 2015 2:06 pm

Re: [tutorial] modulo WWW::Mechanize

Post by 51M0N » Mon Jun 17, 2019 8:53 am

muito bom o post mano
Image
"Você, eu, nem ninguém vai bater tão duro como a vida. Mas não se trata de bater duro. Se trata de quanto você aguenta apanhar e seguir em frente (...). É assim que se consegue vencer." by Rocky Balboa

Post Reply

Return to “Perl”