Tips集
■超簡単なサンプル
require "mechanize" agent = Mechanize.new agent.get("http://d.hatena.ne.jp/shima111/")
■アクセスしたページを取得する
page = agent.page
page.uri #<URI::HTTP:0x157f698 URL:http://d.hatena.ne.jp/shima111/>
■リンクをクリックする
# 表示されてる文字列にマッチするリンクタグをクリック page.link_with(:text=>"shima111").click page.links_with(:text=>"shima111")[0].click # その後再度pageを取得すると、遷移先のpageになっている agent.page.uri #<URI::HTTP:0x1b154e0 URL:http://d.hatena.ne.jp/shima111/about>
■フォームをsubmitする
# 対象となるフォームを取得し、検索キーワードを入力 form = agent.page.form_with(:action=>"/shima111/searchdiary") form.word = 'プログラム' form.submit # 検索結果ページに遷移 agent.page.uri #<URI::HTTP:0x1ace0f8 URL:http://d.hatena.ne.jp/shima111/searchdiary?word=%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0&type=detail>
■XXX_with、XXXs_with について
- 自Node下にある特定のタグを検索する
- 検索方法は属性名=>属性値が基本となるが、文字列だけの場合は:name=>"..."という意味。
- :textだけは特殊でタグで囲まれた文字列となる
- XXX_with、XXXs_with を持ってるクラスは以下の3つで、それぞれwithで検索できるものも一緒に示しておく
- Page
- form_with
- link_with
- base_with
- frame_with
- iframe_with
- image_with
- Form
- field_with
- button_with
- file_upload_with
- radiobutton_with
- checkbox_with(複数検索は checkboxes_with)
- MultiSelectList
- elements_with
- Page
page.form_with("form1") # => name="form1" となるform page.form_with(:name => "form1") # と同じ page.link_with(:text => "リンク") # => :text は属性ではなくinner_html page.link_with(:text => /regexp/) # => 正規表現も使える
■フォームをsubmitする2
もう少し実用的なサンプル。フォーム内の入力項目をセットしてsubmitする
# テキスト系(パスワードとかhiddenも全部同じように扱える)。コンボボックス(select) form.input_hidden = "form.input_hidden" form.input_password = "form.input_password" form.input_text = "form.input_text" form.input_textarea = "form.input_textarea" form.input_select= "2" # コンボボックスは個別に取得した方が扱いやすいかもしれない form.field_with("input_select") # => Mechanize::Form::SelectList or Mechanize::Form::MultiSelectList # チェックボックスとラジオボタンは少し面倒 rb = form.radiobutton_with("input_radio") rb.checked # => false rb.check # click とか uncheck で操作できる rb.checked # => true cb = form.checkbox_with("input_checkbox") cb.check # 添付ファイル file_upload = form.file_upload_with("input_file") file_upload.file_name = "file.txt" # 単にファイル名をセットしているだけ file_upload.mime_type = "text/plain" file_upload.file_data = open("c:/a.txt"){|fp| fp.read} # バイナリも可能 file_upload.file_name = "a.png" file_upload.mime_type = "image/png" file_upload.file_data = open("c:/a.png", "rb"){|fp| fp.read} # ボタンを押してsubmit submit_button = form.button_with("input_submit") form.click_button(submit_button)