2011.09.13
【Perl】WWW::Mechanizeを使ってみよう
ある目的のためWWW::Mechanizeを使うことにしたのでまとめておく。
WWW::Mechanizeはいわゆるブラウザみたいなものらしい。
PHPでもCurlがあるじゃないかとも思いましたが、動的ページだとリンクなどに
こっそりIDとか仕掛けてあってそれじゃないとできない仕組みになっていると
htmlの解析を行わないといけない。
WWW::Mechanizeはそれをもっと直感的にやることができる。
フォーム処理だとメール欄に○○をいれて、パスワードに○○をいれて、submitボタンを押す。
見たいなことができるのでブラウザ操作と同じ形でやるので簡単だし問題が出ないというわけです。
理想としてはこれのPHP版があると理想的なのだが残念ながら見つけることができなかった。
だれか知っていたら教えてください。
LinuxへさっくりとインストールするのであればCPANを使って入れるのが手っ取り早い。
<code>$ perl -MCPAN -e shell CPAN> install WWW::Mechanize</code>
基本的な使い方はこんなこんな感じです。
<code>use HTTP::Cookies; use WWW::Mechanize; # cookie_jarの生成 my $cookie_jar = HTTP::Cookies->new(file => "cookie.txt", autosave => 1, ignore_discard => 1); my $mech = WWW::Mechanize->new( autocheck => 1, cookie_jar => $cookie_jar ); #ページ取得 $mech->get('http://localhost/login.php'); #フォームへ入れてクリックを押す $mech->form_number(); $mech->field(user => "aaaa"); $mech->field(pass => "bbbb"); $mech->click(); #ログインできているか確認 print $mech->content();</code>
cookie_jarというクッキーの入れ先を作ってWWW::Mechanizeへ渡すとクッキーを加味した
処理を実行してくれます。
うちの環境だとignore_discardをつけないとなぜかクッキーが保存されない問題がありました。
ignore_discardをはずして動くのであればそのほうがよいと思います。
http://localhost/login.phpを開き、ページにuserとpassを入れるフォームがあり、"aaaa"、"bbbb"を各自入れてクリックする。
結果をcontent()で表示しています。
あとはこんな感じでボタンを押すやらリンクを押すとかしていくと
目的の処理ができると思います。
関連記事