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 の解説サイトは大量にあるのですが,如何せん古いのが…
誰か「ここ見とけば全部解決するよ!」なサイト知りませんか?