phantomjs を Perl からつかえる Wight をためした記録。
YAPC で motemen さんが発表していた Wight をためしたのでそのメモ。
まだ開発途中なかんじなのでドキュメントなどは揃っていないが、ひととおりのメソッドは用意されている、といった印象です。しかしいくつかハマりどころもあるのでメモしておきます。
背景として、テストしたいとかではなく Crawler とかを Wight つかって書こうとしてみているという話です。
Wight::Node のドキュメントがない
ドキュメントないのはともかくメソッドの一覧もないのはきついので、pull-req をおくった。
https://github.com/motemen/Wight/pull/4
おくったあとできづいたけど Wight.pm の方にちょっとかいてあった。。でも Wight/Node.pm の方にかいてあるとありがたいです。see NODE METHODS section in Wight.pm とかかいておくのでもいいけど。
やたらとしゃべる
なにやら web application の console.log の内容がすべて stdout にでるっぽくてうるさい。
なんか解決策がみつからないので issue にした。
https://github.com/motemen/Wight/issues/3
Wight->new(dont_print_web_site_console_log => 1) 的なかんじで出力させられなくなるといいのかなあ。
タイムアウトする方法がよくわからない
↓この issue がそれっぽいかなー、とおもったりはしている。
https://github.com/motemen/Wight/issues/1
要はなんかおもいページのときにあきらめさせたいのだがどうやったものかとおもっている感じです。
$wight->visit() を複数回よぶときは $wight->reset をよぶ
$wight->visit() を発行したあともう一回よぶと、遷移するまえにかえってきちゃうので $wight->reset() をよんでリセットする必要があるっぽい。もっといい方法があるのかもしれないけど。。
$wight->reset() が undocumented なのではまった。
rake いれるのがめんどかった
なんか ruby 力がひくくてパッチおくるために rake うごかそうとしたらなんかうまくうごかなくて、gem install rake とかなんかいろいろやってたらうごくようになった。
CSS Selector support
https://github.com/motemen/Wight/pull/5
XPath つかって書くのめんどいなーというところで Web::Scraper のロジックを移植して、css selector でも find できるようにした。そして pull-req した。
User-Agent かえたい
けどどうやったらいいのかわからない。phantomjs_args で設定するかんじかな。
https://github.com/ariya/phantomjs/blob/master/examples/useragent.coffee
こういうかんじでできそうだけど。。
まとめ
phantomjs 直接つかったほうが楽かなーとおもって直接かいたりもしてみたのだけど、Wight の方が圧倒的に楽でした。
motemen++