2011年9月4日日曜日

WWW::Mechanizeで日頃のちょっとした操作を自動化してみた

誰でも「1日1回サイトにloginして、特定の操作をする」なんて事ありますよね。
最近は、PerlのWWW::Mechanizeを使う事が増えました。
一番シンプルなコードは下記になります。
use strict;
use warnings;
use WWW::Mechanize;
 
my $url = 'site name';
my $id = 'your id';
my $pw = 'your pw';
 
my $mech = WWW::Mechanize->new();
$mech->get($url);
$mech->submit_form(
        fields => {
            'id' => $id,
            'pw' => $pw,
    },
    );
 
print $mech->content;
exit;

でも、サイトによっては単純にはいかない場合もあり(どこか勘違いしているだけかもしれませんが)、そういう場合は、FirefoxのLive HTTP Headrsなどのtoolを使って、HTTPの通信の中身を見ながら調整しています。
また、WWW::MechanizeのHTTP通信の様子をみるには、下記コードを挿入してあげればいいです。

$mech->add_handler(request_send => sub {
    my $req = shift;
    $req->dump;
    return;
                   });
  
$mech->add_handler(response_done => sub {
    my $res = shift;
    $res->dump;
    return;
                   });
このエントリーをはてなブックマークに追加