WWW::Mechanize

これはいい。今までjavascriptでやろうとすると阻まれていたドメイン越えのブラウザ操作がこれで出来る。

Rubyでウェブサイトのアクセスを自動化するライブラリ「WWW::Mechanize」の日本語リファレンスです。
javascriptの処理が入っていてもついてこれるか?という疑問があったのでちょっと試してみた。

fake.php
ブラウザ上でabcと入力して送信ボタンを押すとabcabcになる
<form name=f onsubmit='document.f.i.value+=document.f.i.value'>
<input name=i value='<?=$_REQUEST['i']?>'>
<input type=submit>
</form>
以下のスクリプトでアクセスさせてみる
require 'mechanize'
agent = WWW::Mechanize.new
form = agent.get('http://localhost/fake.php').forms.first
form.i = 'abc'
puts agent.submit(form).body

結果はabcのままだった。残念。
でも、いろいろ使えそうだ。

その他おぼえがき

form.nameはmethod_missingが効かないので、form['name']とする。

ファイルアップロードの場合
form.file_uploads.first.filename = 'a.txt'

逐一ログをとる場合
require 'logger'
agent.log = Logger.new('log.txt')
agent.log.level = Logger::DEBUG