Mechanize 1.0.0 でログインが必要なサイトの情報を取得

色々調べて回ってたんだけど Mechanize の解説が古いバージョンのばっかりで参考になるようなならないような状況なので,適当にまとめる.

実験環境は Ubuntu 11.04,Ruby 1.9.2,gem 1.6.2 です.RVM 使ってます.

まず Mechanize が無いと始まらないということで

% gem install mechanize

これがいきなりエラー.勘弁して下さい.で調べてみて以下の通り実行.
参考 : Ruby/Mechanizeをインストールするときにはまった - taoru's memo

% sudo apt-get install libxslt-dev libxml2-dev

まだ gem install してもエラー.今度は openssl が無いとか何とか.でこれが apt-get で解決しない.で調べてみて以下の通り実行.
参考 : CentOSでWWW::Mechanizeを使う - ElecNotes

% cd ~/.rvm/src/ruby-1.9.2-p180/ext/openssl # ここは環境ごとに移動する場所が違うはず!頑張って探そう!
% ruby extconf.rb
% make
% make install

そしたら晴れて gem install が通りました.mechanize (1.0.0) と nokogiri (1.4.4) がインストールされたようです.

あとはとにかく動くサンプル (最低限改変) を載せておきます.

# -*- coding: utf-8 -*-

require("mechanize")

agent = Mechanize.new
page = agent.get("LOGIN_FORM_URI") # ログインフォームのある URI
form = page.form("FORM_NAME") # ログイン情報 (ユーザ名とかパスワード) を入力させるフォームの名前
                              # <form name="****"> の部分を入力.
form.field_with(:name => "NAME1").value = "USERNAME" # ユーザ名
form.field_with(:name => "NAME2").value = "PASSWORD" # パスワード (簡単のため平文で)
                                                     # NAME1 等には <input name="****"> の部分を入力.
form.click_button()
# form.submit() かもしれない.何かここは色々複雑.

page = agent.get("URI") # ログインした状態で無ければ見えないページの URI
puts page.title
puts page.body
# これでタイトルが見れたり HTML 丸ごとが見えたりします.

form.click_button() を使うと何やら色々と幸せなようです.詳しいことは分かりません.もしかしたら submit がいいのかも知れません.どういうメソッドがあるのかを知りたければ,もしかしたらココとか見ると少しは幸せかもしれません.

Mechanize の解説サイトは大量にあるのですが,如何せん古いのが…

誰か「ここ見とけば全部解決するよ!」なサイト知りませんか?