Ruby Mechanize wiki (ja) - Mechanize::Form

Mechanize::Form



HTML¾å¤Ë¤¢¤ë¥Õ¥©¡¼¥à¡Ê<form>¡Ä</form>¡Ë¤Ò¤È¤Ä¤òɽ¤¹¥¯¥é¥¹¤Ç¤¹¡£

¥Õ¥©¡¼¥à¥³¥ó¥È¥í¡¼¥ë¤Ø¤Î¥¢¥¯¥»¥¹
  1. ¤³¤Î¥¯¥é¥¹¤¬Ä󶡤¹¤ë¥á¥½¥Ã¥É¤Ç³Æ¼ï¥Õ¥©¡¼¥à¥³¥ó¥È¥í¡¼¥ë¡ÊÆþÎÏÍó¡¢¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹Åù¡Ë¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òõ¤¹
  2. õ¤·¤¿ÆþÎÏÍó¤Ê¤É¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Îvalue¤òľÀÜÆþÎϤä¹àÌÜÁªÂò¤ÇŬÅö¤ËÊѹ¹¤¹¤ë
  3. ¤³¤Î¥¯¥é¥¹¤¬Ä󶡤¹¤ë¥á¥½¥Ã¥É¤Ç¡¢¤³¤Î¥¯¥é¥¹¤¬É½¸½¤¹¤ëURL¤Ø¥Õ¥©¡¼¥à¥Ç¡¼¥¿¤òÁ÷¿®
¤È¤¤¤¦Î®¤ì¤Ë¤Ê¤ê¤Þ¤¹¡£
¥³¥ó¥È¥í¡¼¥ë̾HTMLõ¤¹¥á¥½¥Ã¥É
1¹ÔÆþÎÏÍó<input type="text">#field_with
Ê£¿ô¹ÔÆþÎÏÍó<textarea>#field_with
¥Ñ¥¹¥ï¡¼¥É<input type="password">#field_with
±£¤·¥³¥ó¥È¥í¡¼¥ë<input type="hidden">#field_with
¥é¥¸¥ª¥Ü¥¿¥ó<input type="radio">#radiobutton_with
¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹<input type="checkbox">#checkbox_with
ÁªÂò¥á¥Ë¥å¡¼<select>#field_with
Á÷¿®¥Ü¥¿¥ó<input type="submit">#button_with
¥ê¥»¥Ã¥È¥Ü¥¿¥ó<input type="reset">#button_with
¥¤¥á¡¼¥¸¥Ü¥¿¥ó<input type="image">#button_with
ÈÆÍѥܥ¿¥ó<button>#button_with
¥Õ¥¡¥¤¥ëÁ÷¿®<input type="file">#file_upload_with
¤¿¤È¤¨¤Ð¡¢
<form name="f1" action="/search">
  <input type="text" name="q">
  <input type="submit" value="Á÷¿®">
</form>
¤È¤¤¤¦ HTML ÊÒ¤Çɽ¤µ¤ì¤ëÆþÎÏÍó¤Ëʸ»úÎó "Ruby" ¤òÆþÎϤ·¡¢¥Õ¥©¡¼¥à¤Î¡Ê1¤Ä¤·¤«¤Ê¤¤¡ËÁ÷¿®¥Ü¥¿¥ó¤ò²¡¤¹¤Ë¤Ï
# name ¤¬ f1 ¤Ê <form> ¤òõ¤¹
agent.page.form_with(:name => 'f1'){|form|
  # name ¤¬ q ¤ÊÆþÎÏÍó¤òõ¤¹
  form.field_with(:name => 'q'){|field|
    field.value = 'Ruby'
  }
  # ¥Õ¥©¡¼¥à¤Ë submit ¥Ü¥¿¥ó¤¬¤¢¤ì¤Ð¡Ö²¡¡×¤·¤ÆÁ÷¿®
  form.click_button
}
¤È¤·¤Þ¤¹¡£
HTML ¤Î¥Õ¥©¡¼¥à¥³¥ó¥È¥í¡¼¥ë¤È¥µ¡¼¥Ð¤ËÁ÷¤ë¥Ç¡¼¥¿¤ÎÂбþ¤ò¼«ÎϤÇÆɤ߲ò¤±¤ëÄøÅ٤ΠHTML ¤Ë´Ø¤¹¤ëÃ챤¬¤É¤¦¤·¤Æ¤âɬÍפǤ¹¡£

¥Ç¡¼¥¿¤ÎÁ÷¿®

ÊÝ»ý¤¹¤ë¥Õ¥©¡¼¥à¥³¥ó¥È¥í¡¼¥ëÃæ¤Ç¡ÖÍ­¸ú¡×¤Ê¤â¤Î¤À¤±¤ò½¸¤á¡¢HTML ¤Ç¤Î½Ð¸½½ç¤È¤Ï̵´Ø·¸¤ËÁ÷¿®Ãͤòºî¤ê¡¢#action ¤Î URL ¤Ë HTTP¥á¥½¥Ã¥É #method ¤ÇÁ÷¿®¤·¤Þ¤¹¡£
Mechanize ¤Ï¥Ñ¡¼¥¹¤·¤¿ HTML ¤ò UTF-8 ¤È¤·¤Æ°·¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢ÆþÎÏÍó¤Î value ¤Ê¤É¤Î»ØÄê¤â UTF-8 ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
  • HTML ¥Ñ¡¼¥¹¤ËÍѤ¤¤ë Nokogiri ¤ÎÊÖ¤êÃͤ¬ UTF-8 ¸ÇÄê¤Ê¤Î¤Ç Mechanize ¤Î¥á¥½¥Ã¥É¤â UTF-8
  • ¥æ¡¼¥¶¡¼¤¬»ØÄꤹ¤ë¥Õ¥©¡¼¥à¥Ç¡¼¥¿Ê¸»úÎó¤â UTF-8 ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡Ê¥¢¥Ã¥×¥í¡¼¥É¥Õ¥¡¥¤¥ë¤ò½ü¤¯¡Ë
  • Á÷¿®¥Ç¡¼¥¿¤Ï #page ¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Page#encoding ¤Ë Iconv ·Ðͳ¤Ç̾Á°¤âÃͤâÊÑ´¹¤µ¤ì¤¿¾å¤ÇÁ÷¿®
¤È¤¤¤¦½èÍý¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
Á÷¿®Ê¸»ú¥Ç¡¼¥¿¤ÎÃæ¤Ë UTF-8 ¤«¤é Mechanize::Page#encoding ¤ØÊÑ´¹¤Ç¤­¤Ê¤¤Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢½èÍý¤Ç¤­¤Þ¤»¤ó¡£
require 'rubygems'; require 'mechanize'
agent = Mechanize.new{|a| a.user_agent_alias = 'Windows IE 7'}

# meta ¤¬ charset=Shift_JIS ¤Ç¥Õ¥©¡¼¥à¤Î¤¢¤ë¥Ú¡¼¥¸¤ÎÎã
agent.get('http://www.google.com/webhp?hl=ja&lr=lang_ja&ie=Shift_JIS&oe=Shift_JIS')
p agent.page.encoding
agent.page.form_with(:name => 'f'){|form|
  # ¡Ö¤Ï¤·¤´¤À¤«¡×üⶶ¤ò¸¡º÷
  form.field_with(:name => 'q').value = 'üⶶ'
  # ¸¡º÷·ë²Ì¤Î¥Ú¡¼¥¸¡Ê¤Ï¤·¤´¤À¤«´Þ¤à¡Ë¤òÀµ¤·¤¤Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÇºÆ¥Ñ¡¼¥¹¡Êº£²ó̵´Ø·¸¡Ë
}.click_button.encoding = 'CP932'
puts agent.page.title
·ë²Ì¡ÊUTF-8¤Î¤Ï¤·¤´¤À¤«¤Ïiconv¤Î¹Í¤¨¤ëÁǤÎShift_JIS¤Ë¤Ï´Þ¤Þ¤ì¤Ê¤¤¤Î¤ÇÊÑ´¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¥¨¥é¡¼¡Ë¡§
"Shift_JIS"
Iconv::IllegalSequence: "\351\253\231\346\251\213"
        from $GEMLIB/mechanize-1.0.0/lib/mechanize/util.rb:34:in `iconv'
ÊÑ´¹²Äǽ¤Ç¤¢¤ë¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°Ì¾¤ò #page ¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Page#encoding= ¤Ç»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡ÊÁ÷¿®»þ¤ÎÊÑ´¹¤ËɬÍ×¤Ê¤Î¤Ï #page ¥á¥½¥Ã¥É¤ÎÊÖ¤¹ Page ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¾ðÊó¤Ç¤¹¡Ë¡£¤è¤¯¤¢¤ëÎã¤È¤·¤Æ¡¢Windows ¤Ç»È¤ï¤ì¤ë Shift_JIS ¤ÇÁ÷¿®¤·¤¿¤¤¾ì¹ç¡¢³Èĥʸ»ú¤¬´Þ¤Þ¤ì¤ë¤Ê¤é CP932¡ÊÆüËܸì¥Ñ¥Ã¥ÁºÑ¤ß iconv ¤Ê¤é Windows-31J ¤â²Ä¡Ë¤Ë¤Ê¤ê¤Þ¤¹¡£
require 'rubygems'; require 'mechanize'
agent = Mechanize.new{|a| a.user_agent_alias = 'Windows IE 7'}

# meta ¤¬ charset=Shift_JIS ¤Ç¥Õ¥©¡¼¥à¤Î¤¢¤ë¥Ú¡¼¥¸¤ÎÎã
agent.get('http://www.google.com/webhp?hl=ja&lr=lang_ja&ie=Shift_JIS&oe=Shift_JIS')
p agent.page.encoding
agent.page.form_with(:name => 'f'){|form|
  # ¡Ö¤Ï¤·¤´¤À¤«¡×üⶶ¤ò¸¡º÷
  form.field_with(:name => 'q').value = 'üⶶ'
  # ¥Õ¥©¡¼¥à¤ÎÁ÷¿®Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤òCP932¤Ë
  form.page.encoding = 'CP932'
  # ¸¡º÷·ë²Ì¤Î¥Ú¡¼¥¸¡Ê¤Ï¤·¤´¤À¤«´Þ¤à¡Ë¤òÀµ¤·¤¤Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÇºÆ¥Ñ¡¼¥¹¡Êº£²ó̵´Ø·¸¡Ë
}.click_button.encoding = 'CP932'
puts agent.page.title
·ë²Ì¡§
"Shift_JIS"
üⶶ - Google ¸¡º÷
¥æ¡¼¥¶¡¼¤¬»ØÄꤷ¤¿Ê¸»úÎó¤À¤±¤Ç¤Ï¤Ê¤¯¡¢¤â¤È¤â¤È¤Î HTML ¤Î hidden ¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤¿¡Öʸ»ú¥¨¥ó¥³¡¼¥É¥Á¥§¥Ã¥¯ÍÑʸ»ú¡×¤Ê¤É¤¬°ú¤Ã¤«¤«¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£
¤Ê¤ª¡¢¤¢¤Þ¤ê¤Ê¤¤Îã¤Ê¤Î¤Ç¤¹¤¬¡¢¥Õ¥©¡¼¥àÁ÷¿®ÍѤËencoding=¤ò¡Ö»È¤¤¼Î¤Æ¡×¤Æ¤¤¤¿¾ì¹ç¡¢¤½¤ì°Ê¹ß¤Î¥Ú¡¼¥¸Æ⸡º÷¥á¥½¥Ã¥É¤Ï¤¦¤Þ¤¯Æ°ºî¤·¤Þ¤»¤ó¡£
agent.get(euc_uri).form('f'){|form|
  form['text'] = 'ùõ¡ÊÄ̾Τ¿¤Á¤¶¤­¡Ë'
  # EUC-JP¤Î¥Ú¡¼¥¸¤«¤é¤Ê¤¼¤«CP932¤ÇÁ÷¤ë
  form.page.encoding = 'CP932'
}
# url¤ÎHTML¤¬CP932¤È¤·¤Æ²ò¼áÉÔǽ¤Ê¾ì¹ç¤Ï¥Ñ¡¼¥¹·ë²Ì¤¬ÍøÍѤǤ­¤Ê¤¤
agent.visited_page(euc_url).title #=> ???
# ¤Î¤Ç¡¢Ì᤹
agent.visited_page(euc_url).encoding='EUC-JP'
agent.visited_page(euc_url).title #=> "¥¿¥¤¥È¥ë"


## Yahoo!¤Ç¤ÎRuby¤ÈMechanize¤Î¸¡º÷·ë²Ì¤Ë¤³¤Îwiki¤¬´Þ¤Þ¤ì¤ë¤«¤òUTF-8¤Çɽ¼¨¤·¤Æ¤Û¤¯¤Û¤¯¤¹¤ë¥¹¥¯¥ê¥×¥È
require 'rubygems'
require 'mechanize'
# ¸¡º÷¥Ü¥Ã¥¯¥¹¤ËÆþ¤ì¤ë¸ì
search_word = 'Ruby Mechanize'
# ¸¡º÷·ë²Ì¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ÆÍߤ·¤¤¥µ¥¤¥È¤Î¤Æ¤­¤È¤¦URL
re_my_site = Regexp.new(Regexp.quote('w.livedoor.jp/ruby_mechanize'))

agent = Mechanize.new

# Yahoo!¸¡º÷¤Ë¥¢¥¯¥»¥¹¤·¤Æ¥Ú¡¼¥¸¤ò¼èÆÀ
agent.get('http://search.yahoo.co.jp/')
# ¢¬¤Ë´Þ¤Þ¤ì¤ë¥Õ¥©¡¼¥à¤«¤é¡¢name = "w" ¤Ç¤¢¤ë¥Õ¥©¡¼¥à¤ò¤Ò¤È¤Ä¼è¤ê½Ð¤¹
agent.page.form_with(:name => 'w'){|f|
  # <input name=p id=yschsp size=54 ... ¤Ê¸¡º÷¥Ü¥Ã¥¯¥¹¤Îvalue¤Ë¸¡º÷¸ì¤òÀßÄê
  # f.field_with(:name => 'p').value = search_word
  # ºÇ¶á¤Ï¤á¤ó¤É¤¤¤Î¤ÇÆþÎÏÍó¸ÂÄê¤Î Hash É÷µ­Ë¡¤Ç¥É¥ó¤µ¤é¤ËÇÜ
  f['p'] = search_word
  # ¥é¥¸¥ª¥Ü¥¿¥ó¤È¤·¤Æ2¤Ä¤á¡ÊÇÛÎó1Í×ÁÇÌܡˤΡÖÆüËܸì¤Î¥Ú¡¼¥¸¤Î¤ß¡×¥é¥¸¥ª¥Ü¥¿¥ó¤ò¥Á¥§¥Ã¥¯
  f.radiobuttons[1].check
  # HTML ¤Ç submit ¤È»ØÄꤵ¤ì¤Æ¤¤¤ë¥Ü¥¿¥ó¤ò²¡¤·¤ÆÉáÄ̤˥ե©¡¼¥à¥Ç¡¼¥¿¤òÁ÷¿®¤·¡¢·ë²Ì¤ò¼õ¤±¼è¤ë
  f.click_button
}

# ¸¡º÷·ë²Ì¤«¤é¡Ö<li>¤ÎÃæ¤Ë¤¢¤Ã¤¿<a>¡×¤òɽ¤¹Nokogiri¥Î¡¼¥É¥ª¥Ö¥¸¥§¥¯¥È¤òsearch¤Çõ¤·¡¢
# href °À­¤ÎÃͤ¬ re_my_site ¤È¥Þ¥Ã¥Á¤¹¤ë¤è¤¦¤Ê¤â¤Î¤ò¤¹¤Ù¤ÆÃê½Ð
hit_urls = agent.page.search('li a').find_all{|e| re_my_site =~ e['href']}
if hit_urls.empty? then
  puts 'no result'
else
  # ¡Ö<a>¥¿¥°¤òɽ¤¹Nokogiri¥ª¥Ö¥¸¥§¥¯¥È¡×¤Îinner_text¥á¥½¥Ã¥É¤Ï¥¿¥°¤Ç¶´¤Þ¤ì¤¿Ê¸»úÎó
  puts hit_urls.map{|e| "#{e.inner_text}\n#{e['href']}"}.join("\n")
end
·ë²Ì¡ÊUTF-8¡Ë¡§
Mechanize - Ruby Mechanize wiki (ja ...
http://w.livedoor.jp/ruby_mechanize/d/Mechanize
Mechanize::Form::Button - Ruby ...
http://w.livedoor.jp/ruby_mechanize/d/Mechanize::Form::Button



¥Õ¥©¡¼¥à¤òɽ¤¹ Mechanize::Form ¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Þ¤¹¡£
¥æ¡¼¥¶¡¼¤¬»ÈÍѤ¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
°ú¿ô node ¤Ï Nokogiri ¤«¤éÃê½Ð¤·¤¿¤³¤Î¥Õ¥©¡¼¥à¤Î¥Î¡¼¥É¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£Hash ¤Ç¤âÆ°ºî¤·¤Ê¤¯¤â¤Ê¤¤¤Ç¤¹¡£
°ú¿ô mech ¤Ï Mechanize ¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£#click_button ¤Ê¤É¤Ç¥µ¡¼¥Ð¥¢¥¯¥»¥¹¤¹¤ë»þ¤Ë»È¤¤¤Þ¤¹¡£
°ú¿ô page ¤Ï ¤³¤Î¥Õ¥©¡¼¥à¤ò´Þ¤ó¤Ç¤¤¤¿ Mechanize::Page ¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£Á÷¿®Ê¸»úÎó¤Îʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î·èÄê¤Ë»ÈÍѤ·¤Þ¤¹¡£

#fields ¤«¤é¡¢»ØÄꤷ¤¿Ì¾Á°¤ò»ý¤ÄÆþÎÏÍó¤äÁªÂò¥á¥Ë¥å¡¼¤ò Hash É÷¤Ë¤Ò¤È¤ÄÃê½Ð¤·¡¢¤½¤Î¸½ºß¤ÎÃͤòÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ëÆþÎÏÍó¤Ê¤É¤¬Ìµ¤«¤Ã¤¿¾ì¹ç¤Ï nil ¤òÊÖ¤·¤Þ¤¹¡£
agent.page.form_with(:name => 'f1'){|f|
  # ¤è¤¦¤Ï Hash ¤Î¤è¤¦¤Ë¥¢¥¯¥»¥¹
  p f['q']
  # °Ê²¼¤ÈƱ¤¸
  p f.field_with(:name => 'q').value
}
°ú¿ô¤Ï #field ¤¬¼õ¤±ÉÕ¤±¤ë¤â¤Î¤Ç¡¢Ä̾ï¤Ïʸ»úÎó¤«Àµµ¬É½¸½¤Ç¤¹¡£
Mechanize::Page#forms_with ¤Ê¤É¡¢ÇÛÎó¤òÊÖ¤¹¥á¥½¥Ã¥É¤ÈÊ»ÍѤ·¤Æ¤¤¤ë¤È¡Ö¤µ¤Æ¤³¤Î [] ¤ÎÃæ¤Ë¤Ï²¿¤¬Æþ¤ë¤Ç¤·¤ç¤¦¤«¡×¤Î¤è¤¦¤Ê¥¯¥¤¥º¤¬²Äǽ¤Ê¾õÂ֤ˤʤë¤Î¤Ç¡¢»ÈÍѤˤÏÃí°Õ¤ò¤·¤Æ¤¯¤À¤µ¤¤¡£
# ¤Ê¤ó¤À¤³¤ì
agent.page.form_with(:name => 'f')['q']
agent.page.forms_with(:name => /\Af/)[1]

#fields ¤«¤é¡¢»ØÄꤷ¤¿Ì¾Á°¤ò»ý¤ÄÆþÎÏÍó¤äÁªÂò¥á¥Ë¥å¡¼¤ÎÃͤò Hash É÷¤Ë¹¹¿·¤·¤Þ¤¹¡£
value ¤òÊÖ¤·¤Þ¤¹¡£
agent.page.form_with(:name => 'f1'){|f|
  # ¤è¤¦¤Ï Hash ¤Î¤è¤¦¤Ë¥¢¥¯¥»¥¹
  f['q'] = 'Ruby'
  # °Ê²¼¤ÈƱ¤¸
  p f.field_with(:name => 'q').value = 'Ruby'
}
Âè 1°ú¿ô¤Î field_name ¤Ï #field ¤¬¼õ¤±ÉÕ¤±¤ë¤â¤Î¤Ç¡¢Ä̾ï¤Ïʸ»úÎó¤«Àµµ¬É½¸½¤Ç¤¹¡£
³ºÅö¤¹¤ëÆþÎÏÍó¤Ê¤É¤¬Ìµ¤«¤Ã¤¿¾ì¹ç¤Ï¡¢#add_field! ¤Ç¤½¤Î field_name ¤È value ¤ò»ý¤ÄÆþÎÏÍ󤬿·µ¬¤ËºîÀ®¤µ¤ì¤Þ¤¹¡£field_name Éôʬ¤¬´Ö°ã¤Ã¤Æ¤¤¤Æ¤â¥¨¥é¡¼¤Ê¤É¤Ï½Ð¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤ÎÁ÷¿®Àè URL ¤òʸ»úÎó¤ÇÊÖ¤·¤Þ¤¹¡£
¥Ç¥Õ¥©¥ë¥È¤Ï¸µ¤Î form Í×ÁǤΠaction °À­¤ÎÃͤǤ¹¡£Mechanize::Util.html_unescape ¤Ç HTML ¥¨¥¹¥±¡¼¥×¤¬¥¢¥ó¥¨¥¹¥±¡¼¥×¤µ¤ì¤Æ¤¤¤Þ¤¹¡£action °À­¼«ÂΤ¬Â¸ºß¤·¤Ê¤¤ÉÔÀµ¤Ê¥Õ¥©¡¼¥à¤ËÂФ·¤Æ¤Ï NoMethodError ¤òȯÀ¸¤µ¤»¤Þ¤¹¡£HTML ¾å¤Ç action="" ¤À¤Ã¤¿¾ì¹ç¤Ï¶õʸ»úÎó "" ¤òÊÖ¤·¤Þ¤¹¤¬¡¢¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬ Mechanize::Page#forms ¤ÇºîÀ®¤µ¤ì¤¿¤â¤Î¤Ç¡¢ HTML ¤Ç action="" ¤À¤Ã¤¿¾ì¹ç¤Ï¡¢¶õʸ»úÎó¤Ç¤Ï¤Ê¤¯ #page.uri ¤¬ÊÖ¤ê¤Þ¤¹¡£
ÁêÂÐ URL ¤â¤½¤Î¤Þ¤ÞÊÖ¤ê¤Þ¤¹¡ÊÁ÷¿®»þ¤ËÀäÂÐ URL ¤¬¥Õ¥©¡¼¥à¤Î¤¢¤ë¥Ú¡¼¥¸¤Î URL ¤«¤é·×»»¤µ¤ì¤Þ¤¹¡Ë¡£mailto: ¤Ê¤É¤ÏÆ°ºî¤»¤º¡¢¼Â¼Á http: ¤ä https: ¤Ê¤É¤Î Mechanize ¤¬Æ°ºî²Äǽ¤Ê¥¹¥­¡¼¥à¤Î URI ¤Ë¸ÂÄꤵ¤ì¤Þ¤¹¡£
action="" ¤Ç¡¢page.uri ¤È¤·¤Æ base Í×ÁǤΠURL ¤¬»ÈÍѤµ¤ì¤Æ¤·¤Þ¤Ã¤Æ¤¤¤Æ¤¤¤ë¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï #action= ¤ÇºÆÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë field_name ¤È¤¤¤¦Ì¾Á°¤È value ¤È¤¤¤¦Ãͤò»ý¤Ä Mechanize::Form::Field ¥ª¥Ö¥¸¥§¥¯¥È¤ò¿·µ¬¤ËÄɲä·¤Þ¤¹¡£
Äɲäνª¤ï¤Ã¤¿ #fields ¤òÊÖ¤·¤Þ¤¹¡£
µ¼»÷Ū¤ÊÆþÎÏ¥Ú¥¢¤ò¼êÆ°¤ÇÄɲ乤ëɬÍפ¬¤¢¤ë¤È¤­¤Ë»È¤¤¤Þ¤¹¡£

alias #button_with
button_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::Button ·Ñ¾µ¥ª¥Ö¥¸¥§¥¯¥È¤ò #buttons ¤«¤éõ¤·¡¢ºÇ½é¤Î¤â¤Î¤òÊÖ¤·¤Þ¤¹¡£
# b ¤È¤¤¤¦Ì¾Á°¤Î¥Ü¥¿¥ó¤òÌÀ¼¨Åª¤Ë²¡¤·¤ÆÁ÷¿®
page.form_with(:name => 'f1'){|form|
  ...
  form.click_button(form.button_with(:name => 'b'))
}
Æ°ºî¤Ï #xxxx_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Í­¸ú¤Ê¥á¥½¥Ã¥É¤ÈÃͤΥڥ¢¤Ï Mechanize::Form::Button ¤Î¥á¥½¥Ã¥É¤ÈÊÖ¤êÃͤˤʤê¤Þ¤¹¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ë¥Ü¥¿¥ó¤ò¡¢Mechanize::Form::Button ¤ª¤è¤Ó¤½¤ì¤ò·Ñ¾µ¤·¤¿¥Ü¥¿¥ó¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤Ë¤·¤ÆÊÖ¤·¤Þ¤¹¡£
¥Õ¥©¡¼¥à¤Ë³ºÅö¤¹¤ë¥Ü¥¿¥ó¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
Mechanize::Form::Button ¤ÇÊÖ¤ë
  • <input type="button"> # name ¤Ï̵¤¯¤Æ¤è¤¤
  • <button> # name ¤Ï̵¤¯¤Æ¤è¤¤¡¢¤¿¤À¤· <button type="reset"> ¤Ï Mechanize ¤Ç¤Ï¥Ü¥¿¥ó¤È¤ß¤Ê¤µ¤Ê¤¤
Mechanize::Form::ImageButton ¤ÇÊÖ¤ë
  • <input type="image" name="***"> # name ɬ¿Ü
Mechanize::Form::Submit ¤ÇÊÖ¤ë
  • <input type="submit"> # name ¤Ï̵¤¯¤Æ¤è¤¤
Mechanize::Form::Reset ¤ÇÊÖ¤ë
  • <input type="reset" name="***"> # name ɬ¿Ü
°Ê²¼¤Î 3¼ïÎà¤Ï¤³¤Î¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤˤϴޤޤì¤Þ¤»¤ó¡£¤É¤¦¤·¤Æ¤âÍߤ·¤¤¾ì¹ç¤Ï #page ¤«¤é Mechanize::Page#parser ·Ðͳ¤Ç HTML ¥Î¡¼¥É¤òľÀÜõ¤·¤Æ¤¯¤À¤µ¤¤¡£
  • name °À­¤Î¤Ê¤¤ type="image" ¤Ê input Í×ÁÇ
  • name °À­¤Î¤Ê¤¤ type="reset" ¤Ê input Í×ÁÇ
  • type="reset" ¤Ê button Í×ÁÇ
Á÷¿®¥Ü¥¿¥ó¤È°ìÈ̥ܥ¿¥ó¤Î2¤Ä¤Ë¸Â¤Ã¤Æ¤Ï¡¢name °À­¤¬Ìµ¤¤¤â¤Î¤â´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡ÊÉáÄ̤Π#fields ¤Ç¤ÎÆþÎÏÍóÅù¤Ï name ɬ¿Ü¤Ç¤¹¡Ë¡£¥Ü¥¿¥ó¤ÏÎò»ËŪ¤Ë̵̾¤Ç¤¢¤ë¤³¤È¤¬Â¿¤¤¤Î¤Ç¡¢ÆÃÊÌ°·¤¤¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ÇÛÎó¤È¤·¤Æź¤¨»ú¥¢¥¯¥»¥¹¤ò¤¹¤ë¾ì¹ç¤ä Mechanize::Form#click_button ¤ÇÀèƬ¤Î¥Ü¥¿¥ó¤ò¼«Æ°»ÈÍѤ¹¤ë¤è¤¦¤Ê¾ì¹ç¤Ë¤ÏÃí°Õ¤ò¤·¤Æ¤¯¤À¤µ¤¤¡£
ÇÛÎóÍ×ÁǤÏɬ¤º¤·¤â½Ð¸½½ç¤Ç¤Ï¤Ê¤¯¡¢¡ÖHTML ¾å¤Ç¤Î <input type=button¤«submit¤«reset>¡×¤Î¼¡¤Ë¡ÖHTML ¾å¤Ç¤Î <button>¡×¤Î½ç¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£<button> ¤¬Ìµ¤±¤ì¤Ð½Ð¸½½ç¤Ê¤Î¤Ç¤¹¤¬¡£
<input type="submit"> ¤Î·Á¤ÎÁ÷¿®¥Ü¥¿¥ó¤À¤±¤ò½Ð¸½½ç¤ËÊÖ¤·¤ÆÍߤ·¤¤¾ì¹ç¤Ï #submits ¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤À¤±¤òÊÖ¤·¤ÆÍߤ·¤¤¾ì¹ç¤Ï #resets ¤¬¤¢¤ê¤Þ¤¹¤¬¡¢Mechanize 1.0.0 »þÅÀ¤ÇÍøÍÑÍÑÅÓ¤¬¤¢¤ê¤Þ¤»¤ó¡£imagebuttons ¤Ï Mechanize 1.0.0 »þÅÀ¤Ç¸ºß¤·¤Þ¤»¤ó¡£
¾ò·ï¤Ë¤è¤ëÃê½Ð¤Ï #button_with ¤È #buttons_with ¤Ç¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¥Õ¥¡¥¤¥ë¤Ê¤É¤Î¥¢¥Ã¥×¥í¡¼¥É¤ËÍѤ¤¤é¤ì¤ë¡Ö»²¾È¥Ü¥¿¥ó¡×¤Ï #file_uploads ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
¥é¥¸¥ª¥Ü¥¿¥ó¤Ï̾¾Î¤¬¥Ü¥¿¥ó¤Ç¤¹¤¬ #radiobuttons ¤ò¤É¤¦¤¾¡£
Á÷¿®¥Ü¥¿¥ó¤òÁ÷¿®¤Î¤¿¤á¤Ë²¡¤·¤¿¤¤¤À¤±¤Î¾ì¹ç¤Ï¤ï¤¶¤ï¤¶¥Ü¥¿¥ó¤òõ¤¹¤Î¤Ç¤Ï¤Ê¤¯ #click_button ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤÎÍøÍѤ⸡Ƥ¤·¤Æ¤¯¤À¤µ¤¤¡£
Mechanize ¤Ç¤Ï¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤òÁ÷¿®¥Ç¡¼¥¿¥ê¥»¥Ã¥È¤Î¤¿¤á¤Ë²¡¤¹¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡Êµ¡Ç½¤¬Ìµ¤¤¤Î¤ÇÁ÷¿®¥Ü¥¿¥ó¤È¤ß¤Ê¤·¤Æ¤½¤Î¤Þ¤ÞÁ÷¿®¤µ¤ì¤Þ¤¹¡Ë¡£
¥¤¥á¡¼¥¸¥Ü¥¿¥ó¤È»÷¤Æ¤¤¤Þ¤¹¤¬¡¢<area> ¤ò»ÈÍѤ¹¤ë¤¤¤ï¤æ¤ë¥¯¥ê¥Ã¥«¥Ö¥ë¥Þ¥Ã¥×¡Ê¥¯¥é¥¤¥¢¥ó¥È¥µ¥¤¥É¥¯¥ê¥Ã¥¯¥Þ¥Ã¥×¡Ë¤Ï Mechanize::Page#links ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£
buttons_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::Button ¥ª¥Ö¥¸¥§¥¯¥È¤ò #buttons ¤«¤éõ¤·¡¢Á´¤Æ¤òÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
Æ°ºî¤Ï #xxxxs_with ¤ò¡¢¾ò·ï¤Ë¤Ä¤¤¤Æ¤Ï #button_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
checkbox_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::CheckBox ¥ª¥Ö¥¸¥§¥¯¥È¤ò #checkboxes ¤«¤éõ¤·¡¢ºÇ½é¤Î¤â¤Î¤òÊÖ¤·¤Þ¤¹¡£
# <label>  CM¤ÇÃΤä¿ </label> ¤ÊÍó¤ò¥Á¥§¥Ã¥¯
page.forms[0].checkbox_with(:label => '  CM¤ÇÃΤä¿ ').check
# ¥é¥Ù¥ë¤Ë¡ÖCM¤ÇÃΤ信פȤ¤¤¦Ê¸»úÎ󤬴ޤޤì¤Æ¤¤¤ëÍó¤ò¥Á¥§¥Ã¥¯
page.forms[0].checkbox_with(:label => /CM¤ÇÃΤä¿/).check # UTF-8
# value °À­ ¤¬ 32 ¤Ê¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹Í󤫤é¥Á¥§¥Ã¥¯¤ò¤Ï¤º¤¹ 
page.forms[0].checkbox_with(:value => '32').uncheck
Æ°ºî¤Ï #xxxx_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Í­¸ú¤Ê¥á¥½¥Ã¥É¤ÈÃͤΥڥ¢¤Ï Mechanize::Form::CheckBox ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ë¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹¤ò Mechanize::Form::CheckBox ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
name °À­¤Ïɬ¿Ü¤Ç¤¹¡£¥Õ¥©¡¼¥à¤Ë name °À­¤ÎÀßÄꤵ¤ì¤¿¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
  • <input type="checkbox" name="***">
ÇÛÎóÍ×ÁÇ¤Ï HTML ¾å¤Ç¤Îñ½ã¤Ê½Ð¸½½ç¤Ë¤Ê¤ê¤Þ¤¹¡£
¾ò·ï¤Ë¤è¤ëÃê½Ð¤Ï #checkbox_with ¤È #checkboxes_with ¤Ç¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
checkboxes_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::CheckBox ¥ª¥Ö¥¸¥§¥¯¥È¤ò #checkboxes ¤«¤éõ¤·¡¢Á´¤Æ¤òÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
Æ°ºî¤Ï #xxxxs_with ¤ò¡¢¾ò·ï¤Ë¤Ä¤¤¤Æ¤Ï #checkbox_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
click_button(button=buttons.first)

¤³¤Î¥Õ¥©¡¼¥à¤Î¸½ºß¤Î¥Ç¡¼¥¿¤ò¡¢¥Õ¥©¡¼¥à¤ÎºÇ½é¤Î¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¤â¤Î¤È¤ß¤Ê¤·¤Æ¥Õ¥©¡¼¥àÆâ¤Ë»ØÄꤵ¤ì¤¿·Á¼°¤ÇÁ÷¿®Àè¤ËÁ÷¿®¤·¡¢·ë²Ì¤Î¥Ú¡¼¥¸¤òÍúÎò¤ËÄɲä·¤¿¾å¤ÇÊÖ¤·¤Þ¤¹¡£
Á÷¿®¥Ü¥¿¥ó»ØÄ꤬¥Ç¥Õ¥©¥ë¥È¤Ç¤Ä¤¤¤Æ¤ë #submit ¤Ç¤¹¡£#buttons ¤ÎºÇ½é¤Î¥Ü¥¿¥ó¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£Á÷¿®¥Ü¥¿¥ó¤¬¥Õ¥©¡¼¥àÆâ¤Ë 1¤Ä¤À¤±¤È¤¤¤¦°ìÈÌŪ¤Ê¾õ¶·¤Î¾ì¹ç¡¢Ä̾ï¤Î Web ¥Ö¥é¥¦¥¶¤ÎÆ°ºî¤È¤Û¤ÜƱÍͤˤʤäƤ¤¤Þ¤¹¡£Ä̾ï¤Ï¤³¤Î¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£ÉáÄ̤ËÍøÍѤµ¤ì¤ë̵̾¤Ê¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤Ï²¡²¼¤ÎÂоݤˤʤê¤Þ¤»¤ó¤¬¡¢name ¤Î¤Ä¤¤¤¿¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤¬Á÷¿®¥Ü¥¿¥ó¤è¤êÁ°¤ËÇÛÃÖ¤µ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ï¸íÆ°ºî¤·¤Æ¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤Î name ¤È value ¤òÁ÷¿®¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
Button ¥ª¥Ö¥¸¥§¥¯¥È¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£#submit ¤ËľÀÜÅϤµ¤ì¤ë¤Î¤Ç¾ÜºÙ¤Ï¤½¤Á¤é¤Ç¡£submit ¤È¤Ï°ã¤¤¡¢ÄɲåإåÀ¤ò»ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£

#fields ¤«¤é¡¢field_name ¤È°ìÃפ¹¤ë̾Á°¤ò»ý¤ÄÆþÎÏÍó¤Þ¤¿¤ÏÁªÂò¥á¥Ë¥å¡¼¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÁ´¤Æºï½ü¤·¤Þ¤¹¡£
ºï½ü¸å¤Î #fields ¤òÊÖ¤·¤Þ¤¹¡£
field_name ¤Ïʸ»úÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
¥ª¥Ö¥¸¥§¥¯¥È¼«ÂΤòºï½ü¤·¤Æ¤·¤Þ¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£Ä̾ï¤Ï¥Õ¥©¡¼¥àÉôÉʤΠvalue ÁêÅö¤ò¿¿¤Ë¤·¤Ê¤¤¡ÊnilÅù¤ò»ØÄê¡Ë¤³¤È¤ÇÁ÷¿®»ÈÍѲóÈò¤Ï½¼Ê¬¤Ê¤Ï¤º¤Ç¤¹¡£

alias #fields

¤³¤Î¥Õ¥©¡¼¥à¥Ç¡¼¥¿¤òÁ÷¿®¤¹¤ëºÝ¤Î¥¨¥ó¥³¡¼¥É¤Ë»ÈÍѤ¹¤Ù¤­¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°·Á¼°¤Î̾¾Î¤òʸ»úÎó¤ÇÊÖ¤·¤Þ¤¹¡£
¥Ç¥Õ¥©¥ë¥È¤Ï¥Õ¥©¡¼¥à¤Î enctype °À­¤ÎÃͤǤ¹¡£enctype °À­¤¬Ìµ¤«¤Ã¤¿¾ì¹ç¤Ï "application/x-www-form-urlencoded" ¤¬ÊÖ¤ê¤Þ¤¹¡£
#submitt ¤Î°ú¿ô¤ÎÄɲåإåÀ¤Ê¤É¤Ç¾å½ñ¤­¤µ¤ì¤Ê¤¤¸Â¤ê¡¢¤³¤Î¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤǥ¨¥ó¥³¡¼¥É¤µ¤ì¡¢¤³¤Î¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤ¬ Content-Type: ¥ê¥¯¥¨¥¹¥È¥Ø¥Ã¥À¤Ëµ­ºÜ¤µ¤ì¤ÆÁ÷¿®¤µ¤ì¤Þ¤¹¡£Mechanize 1.0.0 ¤¬Âбþ¤·¤Æ¤¤¤ë¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°·Á¼°¤Ï "application/x-www-form-urlencoded" ¤È "multipart/form-data" ¤Î2¤Ä¤Ç¤¹¡£
ºÆÀßÄê¤Ï #enctype= ¤Ç¹Ô¤¤¤Þ¤¹¤¬¡¢ÄɲåإåÀ¤Ç½¤ÀµÉÔ²Äǽ¤Ê¡Ö¥Õ¥¡¥¤¥ë¥¢¥Ã¥×¥í¡¼¥ÉÍ󤬤¢¤ë¤Î¤Ëenctype°À­¤¬¸í¤Ã¤Æ¤ÆMechanize¤¬¸íÆ°ºî¤¹¤ë¡×¤È¤¤¤¦¾ì¹ç°Ê³°¤Ï»È¤¦µ¡²ñ¤¬¤Ê¤¤¤È»×¤ï¤ì¤Þ¤¹¡£
¥Õ¥¡¥¤¥ë¥¢¥Ã¥×¥í¡¼¥É»þ¤ÎÁ÷¿®¥Þ¥ë¥Á¥Ñ¡¼¥È¥Ç¡¼¥¿Æâ¤Ëµ­½Ò¤¹¤ë Content-Type ¹Ô¤Ï Mechanize::Form::FileUpload#mime_type ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

alias #field_with
field_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::Field ¥ª¥Ö¥¸¥§¥¯¥È¤ò #fields ¤«¤éõ¤·¡¢ºÇ½é¤Î¤â¤Î¤òÊÖ¤·¤Þ¤¹¡£
# name ¤¬ q ¤ÊÆþÎÏÍó¤Ë 'val' ¤ò¥»¥Ã¥È
page.forms[0].field_with(:name => 'q').value = 'val'
# list1 ¤È¤¤¤¦ÁªÂò¥á¥Ë¥å¡¼¤Î2¹àÌÜÌܤò¥Á¥§¥Ã¥¯
page.forms[0].field_with(:name => 'list1').options[1].check
Æ°ºî¤Ë¤Ä¤¤¤Æ¤Ï #xxxx_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Í­¸ú¤Ê¥á¥½¥Ã¥É¤ÈÃͤΥڥ¢¤Ï Mechanize::Form::Field ¤« Mechanize::Form::SelectList ¤Î¥á¥½¥Ã¥É¤ÈÊÖ¤êÃͤˤʤê¤Þ¤¹¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ëÆþÎÏÍó¤È±£¤·¥Õ¥£¡¼¥ë¥É¡¢ÁªÂò¥á¥Ë¥å¡¼¤òÇÛÎó¤Ë¤·¤ÆÊÖ¤·¤Þ¤¹¡£
¥Õ¥©¡¼¥à¤Ë name °À­¤ÎÀßÄꤵ¤ì¤¿³ºÅöÍ×ÁǤ¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
Mechanize::Form::Text ¤ÇÊÖ¤ë
  • <input type="text" name="***"> # °ì¹ÔÆþÎÏÍó
Mechanize::Form::Field ¤ÇÊÖ¤ë
  • <input type="password" name="***"> # ÆþÎϤ¬¥Þ¥¹¥¯¤µ¤ì¤ë¥Ñ¥¹¥ï¡¼¥ÉÆþÎÏÍó
  • <input name="***"> # type ¤¬Ìµ¤¤¤â¤Î¡¢Mechanize¤ÇÂбþ¥¯¥é¥¹¤Î̵¤¤ type ¤Î¤â¤Î
  • <textarea name="***"> # Ê£¿ô¹ÔÆþÎÏÍó
Mechanize::Form::Hidden ¤ÇÊÖ¤ë
  • <input type="hidden" name="***"> # ²èÌ̤Ëɽ¼¨¤µ¤ì¤Ê¤¤¤â¤Î
Mechanize::Form::Textarea ¤ÇÊÖ¤ë
  • <input type="textarea" name="***"> # »ÅÍ;å¤Ï¸ºß¤·¤Ê¤¤¥¨¥é¡¼½èÍý
Mechanize::Form::SelectList ¤ÇÊÖ¤ë
  • <select name="***"> # ¤Ò¤È¤Ä¤À¤±¹àÌܤ¬ÁªÂò²Äǽ¤Ê¥É¥í¥Ã¥×¥À¥¦¥ó¥á¥Ë¥å¡¼
Mechanize::Form::MultiSelectList ¤ÇÊÖ¤ë
  • <select multiple name="***"> # Ctrl¥­¡¼Åù¤ÇÊ£¿ô¹àÌܤ¬ÁªÂò²Äǽ¤Ê¥É¥í¥Ã¥×¥À¥¦¥ó¥á¥Ë¥å¡¼
¤É¤Î¾ì¹ç¤â¡¢Í×ÁǤΠname °À­¤Ïɬ¿Ü¤Ç¤¹¡£name ¤Î¤Ê¤¤ÆþÎÏÍó¤ä¥á¥Ë¥å¡¼¤ÏÀ¸À®¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¡¢ÊÖ¤êÃͤ˰ìÀÚ´Þ¤Þ¤ì¤Þ¤»¤ó¡£¤³¤Î¥Õ¥©¡¼¥àÆâ¤Ç¥Í¥¹¥È¤·¤Æ¤¤¤¿¾ì¹ç¤Ç¤¢¤Ã¤Æ¤â¡¢ÇÛÎó¤¬Æþ¤ì»Ò¤Ë¤Ê¤ë¤è¤¦¤Ê¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¾ò·ï¤Ë¤è¤ëÃê½Ð¤Ï #field_with ¤È #fields_with ¤Ç¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤Ê¤ª¡¢ÇÛÎóÆâ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¼ïÎà¤Î½çÈÖ¤ÏÆâÉô¤ÎÅÔ¹ç¤Ç¤°¤Á¤ã¤°¤Á¤ã¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ÇÛÎó¤È¤·¤Æ¤Îź¤¨»ú¥¢¥¯¥»¥¹¤Ç¤Ï¤Ê¤¯¡¢¶ËÎÏ field_with Åù¤Ç¾ò·ïÃê½Ð¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ÇÛÎóÍ×ÁǤȤ·¤Æ¥¢¥¯¥»¥¹¤·¤¿¤¤¾ì¹ç¤Ï¡¢¤½¤ì¤¾¤ì¤Î¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤À¤±¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤ë #texts ¤ä #hiddens ¤ä #textareas ¤ò¤ª´«¤á¤·¤Þ¤¹¡£¤³¤ì¤é¤Ï½Ð¸½½ç¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤Ê¤ª¡¢selectlists ¤Ï Mechanize 1.0.0 »þÅÀ¤Ç¤Ï¸ºß¤·¤Þ¤»¤ó¡£
²¿¤é¤«¤ÎÍýͳ¤Ç fields ¤½¤Î¤â¤Î¤ò HTML ¾å¤Ç¤Î½Ð¸½½ç¤Ë¤É¡¼¤·¤Æ¤âʤ٤¿¤¤¤È¤¤¤¦¾ì¹ç¤Ï sort ¤·¤Æ¤¯¤À¤µ¤¤¡£
require 'rubygems'; require 'mechanize'
html = <<HTML
<html><title>test</title><body><form>
<select name="one"></select> <input type="text" name="two"> <textarea name="three"></textarea>
</form></body></html>
HTML
agent = Mechanize.new
page = Mechanize::Page.new(URI.parse('http://localhost/'), {'content-type'=>'text/html'}, html, '200', agent)
agent.__send__(:add_to_history, page)

p agent.page.forms[0].fields.map{|f| f.name}
p agent.page.forms[0].fields.sort.map{|f| f.name}
·ë²Ì¡§
["two", "three", "one"]
["one", "two", "three"]
fields_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::Field ·Ñ¾µ¥ª¥Ö¥¸¥§¥¯¥È¤ò #fields ¤«¤éõ¤·¡¢Á´¤Æ¤òÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
Æ°ºî¤Ë¤Ä¤¤¤Æ¤Ï #xxxxs_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Í­¸ú¤Ê¥á¥½¥Ã¥É¤ÈÃͤΥڥ¢¤Ï Mechanize::Form::Field ¤« Mechanize::Form::MultiSelectList¡¢Mechanize::Form::SelectList ¤Î¥á¥½¥Ã¥É¤ÈÊÖ¤êÃͤˤʤê¤Þ¤¹¡£
Ê£¿ô¤Î Field ¥ª¥Ö¥¸¥§¥¯¥È¤ËÃͤòÀßÄꤷ¤¿¤¤¾ì¹ç¤Ï #set_fields ¤âÍøÍѤǤ­¤Þ¤¹¡£
file_upload_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::FileUpload ¥ª¥Ö¥¸¥§¥¯¥È¤ò #file_uploads ¤«¤éõ¤·¡¢ºÇ½é¤Î¤â¤Î¤òÊÖ¤·¤Þ¤¹¡£
# upload ¤È¤¤¤¦Ì¾Á°¤Î¥¢¥Ã¥×¥í¡¼¥ÉÍ󤫤é¥í¡¼¥«¥ë¤Î 001.jpg ¤ò»ØÄꤷ¤ÆÁ÷¿®
page.form_with(:name => 'f1'){|form|
  form.file_upload_with(:name => 'upload').file_name = './001.jpg'
  form.click_button
}
Æ°ºî¤Ï #xxxx_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Í­¸ú¤Ê¥á¥½¥Ã¥É¤ÈÃͤΥڥ¢¤Ï Mechanize::Form::FileUpload ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë¥¢¥Ã¥×¥í¡¼¥ÉÍó¤ò Mechanize::Form::FileUpload ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
name °À­¤Ïɬ¿Ü¤Ç¤¹¡£¥Õ¥©¡¼¥à¤Ë name °À­¤ÎÀßÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¥¢¥Ã¥×¥í¡¼¥ÉÍ󤬴ޤޤì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
  • <input type="file">
ÇÛÎóÍ×ÁÇ¤Ï HTML ¾å¤Ç¤Îñ½ã¤Ê½Ð¸½½ç¤Ë¤Ê¤ê¤Þ¤¹¡£
¾ò·ï¤Ë¤è¤ëÃê½Ð¤Ï #file_upload_with ¤È #file_uploads_with ¤Ç¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
file_uploads_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::FileUpload ¥ª¥Ö¥¸¥§¥¯¥È¤ò #file_uploads ¤«¤éõ¤·¡¢Á´¤Æ¤òÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
Æ°ºî¤Ï #xxxxs_with ¤ò¡¢¾ò·ï¤Ë¤Ä¤¤¤Æ¤Ï #file_upload_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤¿¤È¤­¤Ë»ÈÍѤ·¤¿ HTML ¥Î¡¼¥É¤ò Nokogiri::HTML::Element Åù¤ÇÊÖ¤·¤Þ¤¹¡£
¤³¤Î¥Õ¥©¡¼¥à¼«ÂΤòɽ¤¹¥Î¡¼¥É¤¬ÊÖ¤ê¤Þ¤¹¡£Ãæ¿ÈŪ¤Ë¤Ï Nokogiri::HTML.parse(¤³¤Îform¥¿¥°) ¤Ç¤¹¡£
¾¤Î¥¯¥é¥¹¤È·¤¨¤ë¤Ê¤éËÜÅö¤Ï node ¤È¤¤¤¦¥á¥½¥Ã¥É̾¤Ç¤¢¤ë¤Ù¤­¤Ç¤¹¤¬¡¢¤¤¤í¤¤¤í¤¢¤Ã¤Æ¤Þ¤ÀÄ󶡤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
Mechanize::Page#form_with ¤Ç¤Ï class °À­¤ä id °À­¤Ë¤è¤ëÁªÂò¤¬¤Ç¤­¤Ê¤¤¤Î¤Ç¡¢¤³¤Î form_node ¥á¥½¥Ã¥É¤¬ÍøÍѤµ¤ì¤Þ¤¹¡£
# <form id="exform"> ¤Ê¥Õ¥©¡¼¥à¤ò id °À­¤ÎÃͤÇÃê½Ð
# form_with(:id => 'exform') ¤Ë³ºÅö
form = agent.page.forms.find{|f| f.form_node['id'] == 'exform'}

¤³¤Î¥Õ¥©¡¼¥à¤Ë»ØÄꤷ¤¿Ì¾Á°¤ÎÆþÎÏÍó¤äÁªÂò¥á¥Ë¥å¡¼¤¬¤¢¤ì¤Ð¿¿¤òÊÖ¤·¤Þ¤¹¡£
#fields ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Field#name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃÍ¤È field_name ¤ò eql? ¤Çʸ»úÎóÈæ³Ó¤·¡¢°ìÃפ·¤¿¤â¤Î¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ì¤Ð true ¤ò¡¢Ìµ¤±¤ì¤Ð false ¤òÊÖ¤·¤Þ¤¹¡£
°ú¿ô field_name ¤Ïʸ»úÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Àµµ¬É½¸½¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï #field_with ¤ËÅϤ·¤Æ·ë²Ì¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
fill_login_field(page) if page.field_with(:name => /login/)

alias #has_field?

¤³¤Î¥Õ¥©¡¼¥à¤Ë»ØÄꤷ¤¿ÃͤÎÆþÎÏÍó¤äÁªÂò¥á¥Ë¥å¡¼¤¬¤¢¤ì¤Ð¿¿¤òÊÖ¤·¤Þ¤¹¡£
#fields ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Field#value ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃÍ¤È value ¤ò eql? ¤Çʸ»úÎóÈæ³Ó¤·¡¢°ìÃפ·¤¿¤â¤Î¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ì¤Ð true ¤ò¡¢Ìµ¤±¤ì¤Ð false ¤òÊÖ¤·¤Þ¤¹¡£
°ú¿ô value ¤Ïʸ»úÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Àµµ¬É½¸½¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï #field_with ¤ËÅϤ·¤Æ·ë²Ì¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
ÆþÎÏÍó¤ÎÃͤòÊѹ¹¤·¤Æ¤¤¤¿¾ì¹ç¤Ï¡¢Êѹ¹¸å¤ÎÃͤÈÈæ³Ó¤µ¤ì¤Þ¤¹¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë»ØÄꤷ¤¿Ì¾Á°¤Î±£¤·ÆþÎÏÍ󤬤¢¤ì¤Ð¿¿¤òÊÖ¤·¤Þ¤¹¡£
#hiddens ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Hidden#name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃÍ¤È field_name ¤ò == ¤Çʸ»úÎóÈæ³Ó¤·¡¢°ìÃפ·¤¿¤â¤Î¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ì¤Ð true ¤ò¡¢Ìµ¤±¤ì¤Ð false ¤òÊÖ¤·¤Þ¤¹¡£
°ú¿ô¤Ïʸ»úÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Àµµ¬É½¸½¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï #field_with ¤ËÅϤ·¤Æ·ë²Ì¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
#hiddens ¤Ë´Þ¤Þ¤ì¤Ê¤¤±£¤·ÆþÎÏÍó¤Ïõ¤»¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ë±£¤·ÆþÎÏÍó¤ò Mechanize::Form::Hidden ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
ÆþÎÏÍó¤Î name °À­¤Ïɬ¿Ü¤Ç¤¹¡£¤³¤Î¥Õ¥©¡¼¥à¤Ë name °À­¤ÎÀßÄꤵ¤ì¤¿±£¤·ÆþÎÏÍ󤬴ޤޤì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
  • <input type="hidden" name="***">
#fields ¤«¤é Mechanize::Form::Hidden ¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òõ¤·¤ÆÊÖ¤·¤Æ¤¤¤Þ¤¹¡£
»ÄÇ°¤Ê¤¬¤é hidden_with ¤Î¤è¤¦¤Ê¾ò·ïÃê½Ð¥á¥½¥Ã¥É¤Ï¤¢¤ê¤Þ¤»¤ó¡£#field_with ¤È #fields_with ¤ÇÂåÍѤ·¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¤¬»ý¤ÄÆþÎÏÍó¤äÁªÂò¥á¥Ë¥å¡¼¤Î̾Á°¤òÆþÎϾõÂ֤˴ؤï¤é¤ºÁ´¤Æ½¸¤á¡¢ÇÛÎó¤È¤·¤ÆÊÖ¤·¤Þ¤¹¡£
#fields ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Field#name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤò½¸¤á¤Æ¡¢ÇÛÎó¤Ë¤·¤ÆÊÖ¤·¤Þ¤¹¡£
½çÈÖ¤Ï #fields °Í¸¤Ç¡¢HTML ¾å¤Ç¤Î½Ð¸½½ç¤ò¤ª¤ª¤à¤ÍÈ¿±Ç¤·¤Æ¤¤¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤ÎÁ÷¿®»þ¤Ë»ÈÍѤ¹¤ë HTTP ¥á¥½¥Ã¥É¤òÂçʸ»úʸ»úÎó¤ÇÊÖ¤·¤Þ¤¹¡£
¥Ç¥Õ¥©¥ë¥È¤Ï¸µ¤Î form Í×ÁǤΠmethod °À­¤ÎÃͤǤ¹¡£method °À­¼«ÂΤ¬Ìµ¤«¤Ã¤¿¾ì¹ç¤Ï GET ¤òÊÖ¤·¡¢method="" ¤À¤Ã¤¿¾ì¹ç¤Ï¤³¤Î¥á¥½¥Ã¥É¤Ï¶õʸ»úÎó "" ¤òÊÖ¤·¤Þ¤¹¡ÊÁ÷¿®¤Ë¤Ï¼ºÇÔ¤·¤Þ¤¹¡Ë¡£
ºÆÀßÄê¤Ï #method= ¤«¤é¹Ô¤¤¤Þ¤¹¡£

¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ëÆþÎÏÍó¤äÁªÂò¥á¥Ë¥å¡¼¤ÎÃͤμèÆÀ¤äÀßÄê¤Ë¡¢Ì¾Á°¤ÈƱ¤¸¥á¥½¥Ã¥É̾¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
agent.page.form_with(:name => 'f').field_with(:name => 'q').value = 'Ruby'
¤È½ñ¤¯Âå¤ï¤ê¤Ë¡¢ÆþÎÏÍóÁªÂò¤È Mechanize::Form::Field#value= ¥á¥½¥Ã¥ÉÉôʬ¤ò¡ÖÈô¤Ð¤·¡×¤Æ¡¢
agent.page.form_with(:name => 'f').q = 'Ruby'
¤È½ñ¤±¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£¤Á¤ç¤¦¤É¡¢#[]= ¥á¥½¥Ã¥É¤òÍøÍѤ¹¤ë¤È¤³¤í¤Î
agent.page.form_with(:name => 'f')['q'] = 'Ruby'
¤ÈƱ¤¸¤è¤¦¤Ê¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹¡£
°ì±þºÇûµ­½Ò¤Ê¤Î¤Ç¤¹¤¬¡¢Ruby ɸ½à¤Î method_missing ¤òÍøÍѤ·¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤Î¥Õ¥©¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬»ý¤Ã¤Æ¤¤¤ë¥á¥½¥Ã¥É̾¤ÈÈï¤ë¾ì¹ç¤ÏÆ°ºî¤·¤Þ¤»¤ó¡£
page.forms[0].field_with(:name => 'field').value
¤Î¤Ä¤â¤ê¤Ç
page.forms[0].field
¤È½ñ¤¯¤È¡¢#field ¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·¤À¤È»×¤ï¤ì¤Æ¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£Ruby ¤Î¥á¥½¥Ã¥É̾¤Ë¤Ï - ¤ò´Þ¤à¤³¤È¤â¤Ç¤­¤Ê¤¤¤Î¤Ç¡¢
page.forms[0].field_with(:name => 'field-data').value
¤Î¤Ä¤â¤ê¤Ç
page.forms[0].field-data
¤È½ñ¤¤¤Æ¤â¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£
¤É¤¦¤·¤Æ¤â¥á¥½¥Ã¥É¥Á¥§¡¼¥ó¤Î¸«¤«¤±¤Ç½ñ¤­¤¿¤¤¤È¤¤¤¦¤Î¤Ç¤Ê¤±¤ì¤Ð¡¢#[] ¤ä #[]= ¤Ç Hash ¤Î¤è¤¦¤Ëµ­½Ò¤·¤¿¤Û¤¦¤¬´ÊÊؤÀ¤È»×¤¤¤Þ¤¹¡£
page.forms[0].field_with(:name => 'field').value
page.forms[0]['field']

page.forms[0].field_with(:name => 'field-data').value
page.forms[0]['field-data']
¤³¤Î¾ì¹ç¤Ï field ¤È¤¤¤¦Ì¾Á°¤â field-data ¤È¤¤¤¦Ì¾Á°¤âÌäÂê¤Ê¤¯Æ°ºî¤·¤Þ¤¹¤·¡¢¸åÆü¡Ö¤³¤Îq¥á¥½¥Ã¥É¤Ã¤Æ¥Þ¥Ë¥å¥¢¥ë¤Î¤É¤³¤Ë½ñ¤¤¤Æ¤¢¤ë¤Î¡©¡×¤ÈǺ¤à¤³¤È¤â¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£

¤³¤Î¥Õ¥©¡¼¥à¤Î̾Á°¤òʸ»úÎó¤ÇÊÖ¤·¤Þ¤¹¡£
¥Ç¥Õ¥©¥ë¥È¤Ï¸µ¤Î form Í×ÁǤΠname °À­¤ÎÃͤǤ¹¡£name °À­¤¬Ìµ¤«¤Ã¤¿¾ì¹ç¤Ï nil ¤òÊÖ¤·¤Þ¤¹¡£
ºÆÀßÄê¤Ï #name= ¤«¤é¹Ô¤¤¤Þ¤¹¡£

¤³¤Î¥Õ¥©¡¼¥à¤¬½ê°¤¹¤ë Mechanize::Page ¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤·¤Þ¤¹¡£
agent.page.form_with(:name => 'f1'){|form|
  p agent.page == form.page #=> true
}
Ä̾Form.new ¤Î°ú¿ô¤Ç»ØÄꤵ¤ì¤¿¥Ú¡¼¥¸¤ÈƱ°ì¥ª¥Ö¥¸¥§¥¯¥È¤¬ÊÖ¤ê¤Þ¤¹¤¬¡¢¼êÆ°ºîÀ®»þ¤Ê¤É¤Ç̵»ØÄê¤À¤Ã¤¿¾ì¹ç¤Ë¤Ï nil ¤òÊÖ¤·¤Þ¤¹¡£
radiobutton_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::RadioButton ¥ª¥Ö¥¸¥§¥¯¥È¤ò #radiobuttons ¤«¤éõ¤·¡¢ºÇ½é¤Î¤â¤Î¤òÊÖ¤·¤Þ¤¹¡£
# <label>¡¡ÃËÀ­</label> ¤Ê¥é¥¸¥ª¥Ü¥¿¥ó¤Î¤ß on
page.forms[0].radiobutton_with(:label => '¡¡ÃËÀ­').check
# ¥é¥Ù¥ë¤Ë¡ÖÃËÀ­¡×¤È¤¤¤¦Ê¸»úÎ󤬴ޤޤì¤Æ¤¤¤ë¥é¥¸¥ª¥Ü¥¿¥ó¤Î¤ß on
page.forms[0].radiobutton_with(:label => /ÃËÀ­/).check # UTF-8
# value °À­ ¤¬ e2 ¤Ê¥é¥¸¥ª¥Ü¥¿¥ó¤Î¤ß on
page.forms[0].radiobutton_with(:value => 'e2').check
Æ°ºî¤Ï #xxxx_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Í­¸ú¤Ê¥á¥½¥Ã¥É¤ÈÃͤΥڥ¢¤Ï Mechanize::Form::RadioButton ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ë¥é¥¸¥ª¥Ü¥¿¥ó¤ò Mechanize::Form::RadioButton ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
name °À­¤Ïɬ¿Ü¤Ç¤¹¡£¥Õ¥©¡¼¥à¤Ë name °À­¤ÎÀßÄꤵ¤ì¤¿¥é¥¸¥ª¥Ü¥¿¥ó¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
  • <input type="radio" name="***">
¥Á¥§¥Ã¥¯ÍѤΥ°¥ë¡¼¥×¤Ê¤É¤ÏÇÛÎó¾å¹Í褵¤ì¤º¡¢¤Õ¤Ä¤¦¤Ë½Ð¸½½ç¤ËÇÛÎóÍ×ÁǤËÄɲ䵤ì¤Þ¤¹¤¬¡¢¥Á¥§¥Ã¥¯¤ò¹Ô¤¦ºÝ¤Ï¡¢¤³¤ÎÇÛÎó¤ÎÃæ¤ÇÇÓ¾½èÍý¤¬¹Ô¤ï¤ì¤Þ¤¹¡£
¾ò·ï¤Ë¤è¤ëÃê½Ð¤Ï #radiobutton_with ¤È #radiobuttons_with ¤Ç¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
radiobuttons_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦°ú¿ô pattern ¤òËþ¤¿¤¹ Mechanize::Form::RadioButton ¥ª¥Ö¥¸¥§¥¯¥È¤ò #radiobuttons ¤«¤éõ¤·¡¢Á´¤Æ¤òÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
# gender ¤È¤¤¤¦Ì¾Á°¤Ç³ç¤é¤ì¤ë¡Ö¥é¥¸¥ª¥Ü¥¿¥ó¥°¥ë¡¼¥×¡×¤Î2¸ÄÌܤò¥Á¥§¥Ã¥¯
page.forms[0].radiobuttons_with(:name => 'gender')[1].check
Æ°ºî¤Ï #xxxxs_with ¤ò¡¢¾ò·ï¤Ë¤Ä¤¤¤Æ¤Ï #radiobutton_with ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
Í­¸ú¤Ê¥á¥½¥Ã¥É¤ÈÃͤΥڥ¢¤Ï Mechanize::Form::RadioButton ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

#fields ¤Ç°·¤¦ÆþÎÏÍó¤äÁªÂò¥á¥Ë¥å¡¼¤Ë¡¢Ãͤò°ìÅÙ¤ËÊ£¿ôÀßÄꤷ¤Þ¤¹¡£
°ú¿ô¤Î name_and_value_hash ¤¬ÊÖ¤ê¤Þ¤¹¡£
form[0].field_with(:name => 'name1').value = 'val1'
form[0].field_with(:name => 'name2').value = 'val2'
¤È¤¤¤¦2¤Ä¤ÎÆþÎÏÍó¤ËÂФ¹¤ë½èÍý¤ò
forms[0].set_fields('name1' => 'val1', 'name2' => 'val2')
¤È Hash ¤òÍѤ¤¤Æ°ìȯ¤Ç½ñ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
name ¤Ë³ºÅö¤¹¤ë¤â¤Î¤Ïʸ»úÎó¤« Symbol ¤Ç»ØÄꤷ¤Þ¤¹¡£to_s ¤µ¤ì¤Æ¤¤¤ë¤Î¤ÇÀµµ¬É½¸½¤Ï»ÈÍѤǤ­¤Þ¤»¤ó¡£name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͰʳ°¤Ç¸¡º÷¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£
name ¤ËÁêÅö¤¹¤ëÆþÎÏÍ󤬥ե©¡¼¥à¤ËÊ£¿ô´Þ¤Þ¤ì¤Æ¤¤¤Æ¡¢ÀèƬ¤ÎÆþÎÏÍó°Ê³°¤ËÃͤò¥»¥Ã¥È¤·¤¿¤¤¤È¤¤¤¦¾ì¹ç¤Ï¡¢ index ¤òÍ×ÁÇ 2¤ÎÇÛÎó¤« Hash ¤Î¥Ú¥¢¤Ç»ØÄꤷ¤Þ¤¹¡£
form[0].fields_with(:name => 'name1')[index1].value = 'val1'
form[0].fields_with(:name => 'name2')[index2].value = 'val2'
¤Ï
forms[0].set_fields('name1' => ['val1', index1], 'name2' => ['val2', index2])
forms[0].set_fields('name1' => {index1 => 'val1'}, 'name2' => {index2 => 'val2'})
¤Î¤É¤Á¤é¤«¤Çɽ¸½¤Ç¤­¤Þ¤¹¡£index ¤Ï #fields_with ¤¬ÊÖ¤¹ÇÛÎó¤ËÂФ¹¤ë¤â¤Î¤Ç¡¢0 ¤«¤é»Ï¤Þ¤ê¤Þ¤¹¡£
submit(button=nil)
submit(button=nil, headers={})

¤³¤Î¥Õ¥©¡¼¥à¤Î¸½ºß¤Î¥Ç¡¼¥¿¤ò¡¢¥Õ¥©¡¼¥àÆâ¤Ë»ØÄꤵ¤ì¤¿·Á¼°¤ÇÁ÷¿®Àè¤ËÁ÷¿®¤·¡¢·ë²Ì¤Î¥Ú¡¼¥¸¤òÍúÎò¤ËÄɲä·¤¿¾å¤ÇÊÖ¤·¤Þ¤¹¡£
°ú¿ô¤Ç¥Ü¥¿¥ó¤ò»ØÄꤵ¤ì¤Ê¤¤¸Â¤ê¡¢Á÷¿®¥Ü¥¿¥ó¤Î̾Á°¤ÈÃͤòÁ÷¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡ÊÄ̾ï¤Î Web ¥Ö¥é¥¦¥¶¤È¤Ï°ã¤¦Æ°ºî¡Ë¡£¤³¤ì¤¬º¤¤ë¾ì¹ç¤Ïɬ¤º°ú¿ô¤Ë Button ¤ò»ØÄꤹ¤ë¤«¡¢ºÇ½é¤Î¥Ü¥¿¥ó¤Ä¤­ submit ¤ò¹Ô¤¦ #click_button ¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
ÄɲåإåÀ¤¬É¬Íפʾì¹ç¤ÏÂè 2°ú¿ô¤Ç»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
ÆâÉô¤Ç¤Ï Mechanize#submit ¤ò agent.submit(self, button, headers) ¤Ê´¶¤¸¤ÇÍøÍѤ·¤Æ¤¤¤Þ¤¹¡Êagent¤ÏMechanize::Page::Form.new¤Ç¤Î°ú¿ô¡Ë¡£°ú¿ô¤Î button ¤È headers ¤Î°·¤¤¤Ë´Ø¤·¤Æ¤Ï¤½¤Á¤é¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë»ØÄꤷ¤¿Ì¾Á°¤ÎÁ÷¿®¥Ü¥¿¥ó¤¬¤¢¤ì¤Ð¿¿¤òÊÖ¤·¤Þ¤¹¡£
#submits ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Submit#name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃÍ¤È button_name ¤ò == ¤Çʸ»úÎóÈæ³Ó¤·¡¢°ìÃפ·¤¿¤â¤Î¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ì¤Ð true ¤ò¡¢Ìµ¤±¤ì¤Ð false ¤òÊÖ¤·¤Þ¤¹¡£
°ú¿ô¤Ïʸ»úÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Àµµ¬É½¸½¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï #button_with ¤ËÅϤ·¤Æ·ë²Ì¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
#submits ¤Ë´Þ¤Þ¤ì¤Ê¤¤¥Ü¥¿¥ó¤Ïõ¤»¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ëÁ÷¿®¥Ü¥¿¥ó¤ò¡¢Mechanize::Form::Submit ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤Ë¤·¤ÆÊÖ¤·¤Þ¤¹¡£
¥Õ¥©¡¼¥à¤ËÁ÷¿®¥Ü¥¿¥ó¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
  • <input type="submit">
#buttons ¤«¤é Mechanize::Form::Submit ¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òõ¤·¤ÆÊÖ¤·¤Æ¤¤¤Þ¤¹¡£name °À­¤¬¤Ê¤¤Á÷¿®¥Ü¥¿¥ó¤â´Þ¤Þ¤ì¤Þ¤¹¡£
»ÄÇ°¤Ê¤¬¤é submit_with ¤Î¤è¤¦¤Ê¾ò·ïÃê½Ð¥á¥½¥Ã¥É¤Ï¤¢¤ê¤Þ¤»¤ó¡£#button_with ¤È #buttons_with ¤ÇÂåÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
<button> ¤Ï <button type="submit"> ¤ÇÁ÷¿®¥Ü¥¿¥ó¤È¤·¤Æµ¡Ç½¤·¤Þ¤¹¤¬¡¢Mechanize 1.0.0 »þÅÀ¤Ç¤Ï¤³¤Î¥á¥½¥Ã¥É¤Ç¤Ï°·¤¤¤Þ¤»¤ó¡£#buttons ¤Ë¤Ï´Þ¤Þ¤ì¤ë¤Î¤Ç¤½¤Á¤é¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë»ØÄꤷ¤¿Ì¾Á°¤Î°ì¹ÔÆþÎÏÍ󤬤¢¤ì¤Ð¿¿¤òÊÖ¤·¤Þ¤¹¡£
#texts ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Text#name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃÍ¤È field_name ¤ò == ¤Çʸ»úÎóÈæ³Ó¤·¡¢°ìÃפ·¤¿¤â¤Î¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ì¤Ð true ¤ò¡¢Ìµ¤±¤ì¤Ð false ¤òÊÖ¤·¤Þ¤¹¡£
°ú¿ô¤Ïʸ»úÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Àµµ¬É½¸½¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï #field_with ¤ËÅϤ·¤Æ·ë²Ì¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
#texts ¤Ë´Þ¤Þ¤ì¤Ê¤¤°ì¹ÔÆþÎÏÍó¤Ïõ¤»¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ë°ì¹ÔÆþÎÏÍó¤ò Mechanize::Form::Text ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
ÆþÎÏÍó¤Î name °À­¤Ïɬ¿Ü¤Ç¤¹¡£¤³¤Î¥Õ¥©¡¼¥à¤Ë name °À­¤ÎÀßÄꤵ¤ì¤¿°ì¹ÔÆþÎÏÍ󤬴ޤޤì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
  • <input type="text" name="***">
#fields ¤«¤é Mechanize::Form::Text ¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òõ¤·¤ÆÊÖ¤·¤Æ¤¤¤Þ¤¹¡£
»ÄÇ°¤Ê¤¬¤é text_with ¤Î¤è¤¦¤Ê¾ò·ïÃê½Ð¥á¥½¥Ã¥É¤Ï¤¢¤ê¤Þ¤»¤ó¡£#field_with ¤È #fields_with ¤ÇÂåÍѤ·¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¤¬»ý¤ÄÆþÎÏÍó¤äÁªÂò¥á¥Ë¥å¡¼¤ÎÃͤòÆþÎϾõÂ֤˴ؤï¤é¤ºÁ´¤Æ½¸¤á¡¢ÇÛÎó¤È¤·¤ÆÊÖ¤·¤Þ¤¹¡£
#fields ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Field#value ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤò½¸¤á¤Æ¡¢ÇÛÎó¤Ë¤·¤ÆÊÖ¤·¤Þ¤¹¡£
½çÈÖ¤Ï #fields °Í¸¤Ç¡¢HTML ¾å¤Ç¤Î½Ð¸½½ç¤ò¤ª¤ª¤à¤ÍÈ¿±Ç¤·¤Æ¤¤¤Þ¤»¤ó¡£ÆþÎÏÍó¤ÎÃͤòÊѹ¹¤·¤Æ¤¤¤¿¾ì¹ç¤Ï¡¢Êѹ¹¸å¤ÎÃͤ¬ÊÖ¤ê¤Þ¤¹¡£
xxxx_with(pattern){|tgt| optional_non_ensure_block}
xxxx_with(name_str){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦¾ò·ï¤òËþ¤¿¤¹ Xxxx ¥ª¥Ö¥¸¥§¥¯¥È¤ò #xxxxs ¤«¤éõ¤·¡¢ºÇ½é¤Î¤â¤Î¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¬¤Ê¤¤¾ì¹ç¤Ï nil ¤òÊÖ¤·¤Þ¤¹¡£
¤ª¤ª¤à¤Í°Ê²¼¤ÈƱÍͤΤ³¤È¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
# °ì½ï°ì½ï
tgt = form.xxxx_with(:mes => value)
tgt = form.xxxxs.find{|e| value === e.__send__(:mes)}
°ú¿ô pattern ¤Ï¾ò·ï¤òɽ¤¹ Hash ¤Þ¤¿¤Ïʸ»úÎó name_str ¤Ç¤¹¡£name_str ¤Î¾ì¹ç¤Ï {:name => name_str} ¤È¤¤¤¦ Hash ¤È¤ß¤Ê¤·¤Þ¤¹¡£
Object#__send__ ·Ðͳ¤Ç½èÍý¤µ¤ì¤ë¤Î¤Ç¡¢send ¤Ç¤­¤Ê¤¤¤è¤¦¤Ê¤â¤Î¡¢send ¤Î·ë²Ì¤¬°Õ¿Þ¤Ë±è¤ï¤Ê¤¤¤â¤Î¤Ï pattern ¤Î¥­¡¼¤Ë¤ÏÉÔŬ¤Ç¤¹¡£¥Õ¥©¡¼¥à¥³¥ó¥È¥í¡¼¥ë¤ÎÁªÂò¤Ç°ìÈÌŪ¤Ê id °À­¤Ë¤è¤ëÁªÂò¤Ï Mechanize 1.0.0 ¤Ç¤Ï¹Ô¤¨¤Þ¤»¤ó¡£class ¤Ë¤è¤ëÁªÂò¤â¹Ô¤¨¤Þ¤»¤ó¡£
# Object#id ¤Î·ë²Ì¤¬Èæ³Ó¤µ¤ì¤ÆÈᤷ¤¤¤³¤È¤Ë
form.field_with(:id => 'firstname')
¤É¤¦¤·¤Æ¤â id ¤ä class ¤ÇÃê½Ð¤·¤¿¤¤¾ì¹ç¤Ï¡¢¸µ¤ÎÇÛÎó¤ËÂФ·¤Æ find ¤ò¤«¤±¤Æ¤¯¤À¤µ¤¤¡£
# id ¤Ç¤µ¤¬¤¹
form.fields.find{|field| field['id'] == 'firstname'}
# class ¤Ç¤µ¤¬¤¹
form.fields.find{|field| field['class'] == 'cities'}
Èæ³Ó¤Ï value ¤Î === ¥á¥½¥Ã¥É¤¬»ÈÍѤµ¤ì¤ë¤Î¤Ç¡¢Àµµ¬É½¸½¤ò Hash ¤ÎÃͤˤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥á¥½¥Ã¥ÉÊÖ¤êÃÍ¤Ï UTF-8 ¤Ê¤Î¤Ç¡¢Àµµ¬É½¸½¤â UTF-8 ¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
# ¡ÖÁ÷¿®¡×¤È¤¤¤¦Ê¸»úÎ󤬤Ȥˤ«¤¯´Þ¤Þ¤ì¤Æ¤¤¤ë¥Ü¥¿¥ó
form.button_with(:value => /Á÷¿®/) # utf-8
pattern ¤Ë¥Ú¥¢¤òÊ£¿ô»ØÄꤷ¤¿¾ì¹ç¡¢Á´¤Æ¤òËþ¤¿¤¹¤â¤Î¤ò¤Ò¤È¤ÄÈ´¤­½Ð¤·¤Þ¤¹¡Ê¤É¤ì¤«¤òËþ¤¿¤¹¤â¤Î¡¢¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡Ë¡£
¥Ö¥í¥Ã¥¯¤ò¼è¤Ã¤¿¾ì¹ç¡¢½èÍý·ë²Ì¤¬¤Þ¤ë¤´¤È¥Ö¥í¥Ã¥¯¤ËÅϤê¤Þ¤¹¡£Ëþ¤¿¤¹¤â¤Î¤¬¤Ê¤¤¾ì¹ç¤Ç¤â nil ¤¬ÅϤäƤ·¤Þ¤¦¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡Ê¤¿¤¤¤Æ¤¤¥¨¥é¡¼¤ÇÆ°ºî¤·¤Ê¤¤¤³¤È¤Ç¤·¤ç¤¦¡Ë¡£¥Ö¥í¥Ã¥¯¤ÎÊÖ¤êÃͤϥ᥽¥Ã¥É¤ÎÊÖ¤êÃÍ¥ª¥Ö¥¸¥§¥¯¥È¤ËƱ¤¸¤Ç¤¹¡£
xxxxs_with(pattern){|tgt| optional_non_ensure_block}

{¥á¥½¥Ã¥É̾ => ÊÖ¤êÃÍ} ¤È¤¤¤¦¾ò·ï¤òËþ¤¿¤¹ xxxx ¥ª¥Ö¥¸¥§¥¯¥È¤ò #xxxxs ¤«¤éõ¤·¡¢Á´¤Æ¤òÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¬¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£

#xxxx_with ¤Î¡ÖÊ£¿ôõ¤»¤ëÈǡפǤ¹¡£ÆâÉô¤Ç find ¤Ç¤Ï¤Ê¤¯ find_all ¤·¤Æ¤Þ¤¹¡£
# ¤À¤«¤é°ì½ï¤À¤Ã¤Æ¤Ð
tgts = form.xxxxs_with(:mes => value)
tgts = form.xxxxs.find_all{|e| value === e.__send__(:mes)}
pattern ¤Ë¥Ú¥¢¤òÊ£¿ô»ØÄꤷ¤¿¾ì¹ç¡¢Á´¤Æ¤òËþ¤¿¤¹¤â¤Î¤Î¤ß¤òÈ´¤­½Ð¤·¤Þ¤¹¡Ê¤É¤ì¤«¤òËþ¤¿¤¹¤â¤Î¤È¤Ë¤«¤¯Á´Éô¡¢¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡Ë¡£
¥Ö¥í¥Ã¥¯¤ò¼è¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤¬¡¢ÇÛÎóÍ×ÁǤ¬½ç¤ËÅϤë¤Î¤Ç¤Ï¤Ê¤¯·ë²Ì¤Î Array ¥ª¥Ö¥¸¥§¥¯¥È¤¬ 1¸Ä¤½¤Î¤Þ¤ÞÅϤµ¤ì¤Þ¤¹¡£Í×ÁǤ´¤È¤ËÃ༡½èÍý¤ò¤·¤¿¤¤¾ì¹ç¤Ï¤³¤Î¥á¥½¥Ã¥ÉÉÕ°¤Î¥Ö¥í¥Ã¥¯¤Ç¤Ï¤Ê¤¯ Array#each ¤Î¥Ö¥í¥Ã¥¯¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£


Á÷¿®Àè URL ¤òÊÖ¤¹ #action ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤòʸ»úÎó url_str ¤ËÊѹ¹¤·¤Þ¤¹¡£
°ú¿ô url_str ¤Ï URL ¤È¤·¤ÆÍ­¸ú¤Êʸ»úÎó¤ò»ØÄꤷ¤Þ¤¹¡£ÁêÂÐ URL ¤Ç¤â¹½¤¤¤Þ¤»¤ó¡£URI ¥ª¥Ö¥¸¥§¥¯¥È¤Ï¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£

¥Õ¥©¡¼¥àÁ÷¿®¥Ç¡¼¥¿¤Ë¡¢°ú¿ô¤Î Button ¥ª¥Ö¥¸¥§¥¯¥È¤Î̾Á°¤ÈÃͤòÄɲä·¤Þ¤¹¡£¥æ¡¼¥¶¡¼¤¬»ÈÍѤ¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
Äɲûؼ¨¤·¤¿¥Ü¥¿¥ó¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£
Mechanize::Form::Button ¥ª¥Ö¥¸¥§¥¯¥È¤ò #click_button ¤Ê¤É¤ÇÁ÷¿®¤¹¤ë¤è¤¦¤Ë»Ø¼¨¤·¤¿¤È¤­¤ËÆâÉô¤Ç¸Æ¤Ð¤ì¤Æ¤¤¤Þ¤¹¡£¥Ç¡¼¥¿¤ÎÄɲäÀ¤±¤Ç¡¢Á÷¿®¤Ï¹Ô¤¤¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤¬»ý¤ÄÁ÷¿®Íѥǡ¼¥¿¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£¥æ¡¼¥¶¡¼¤¬»ÈÍѤ¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ¤¬¡¢¡Ê¤³¤Î½çÈ֤ǡËÇÛÎó¤ÎÇÛÎó¤È¤·¤ÆÊÖ¤ê¤Þ¤¹¡£
name ¤È value ¤¬ UTF-8 ¤Ç¤Ï¤Ê¤¯¡¢¤Ê¤ª¤«¤Ä #page ¤Ë¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤¬ÀßÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢UTF-8 ¤«¤é Mechanize::Page#encoding ¤Ø Iconv ·Ðͳ¤ÇÊÑ´¹¤µ¤ì¤¿¤â¤Î¤¬ÊÖ¤êÃͤÎÇÛÎó¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¡£Mechanize::Util.from_native_charset ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
name ¤Î¸ºß¤·¤Ê¤¤¥Ü¥¿¥ó¤âÇÛÎóÃæ¤ËÄɲ䵤ì¤Æ¤¤¤Þ¤¹¤¬¡¢name ÁêÅö¤¬ nil ¤Î¥Ú¥¢¤Ï¼ÂºÝ¤ËÁ÷¿®Ê¸»úÎó¤òºîÀ®¤¹¤ëºÝ¤Ëºï½ü¤µ¤ì¤Þ¤¹¡£

¥Õ¥©¡¼¥à¥Ç¡¼¥¿¤ÎÁ÷¿®¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°ÊýË¡¤òÊÖ¤¹ #enctype ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤòʸ»úÎó type ¤ËÊѹ¹¤·¤Þ¤¹¡£
°ú¿ô type ¤Ïʸ»úÎó¤Ç¤¹¡£Ä̾ï¤Ï "application/x-www-form-urlencoded" ¤Ç¡¢¥Õ¥¡¥¤¥ë¥¢¥Ã¥×¥í¡¼¥É¤ò¤¹¤ë¤È¤­¤Ï "multipart/form-data" ¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤ì°Ê³°¤Ë¤ÏÂбþ¤·¤Æ¤¤¤Þ¤»¤ó¡£

HTTP Á÷¿®¥á¥½¥Ã¥É¤òÊÖ¤¹ #method ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤòʸ»úÎó upcase_verb ¤ËÊѹ¹¤·¤Þ¤¹¡£
°ú¿ô upcase_verb ¤Ï HTTP Á÷¿®¥á¥½¥Ã¥É¤È¤·¤ÆÍ­¸ú¤ÊÂçʸ»úʸ»úÎó¤ò»ØÄꤷ¤Þ¤¹¡£HTML ¤Î¥Õ¥©¡¼¥à¤«¤éÁ÷¿®¥Ü¥¿¥ó¤ÇÁ÷¿®¤¹¤ë¾ì¹ç¤Ï GET ¤È POST ¤Î 2¤Ä¤·¤«Æ°ºî¤·¤Þ¤»¤ó¡£PUT Åù¤ò¹Ô¤¤¤¿¤¤¾ì¹ç¤Ï Mechanize#put Åù¤ò»ÈÍѤ·¤Þ¤¹¡£

¤³¤Î¥Õ¥©¡¼¥à¤Î̾Á°¤òÊÖ¤¹ #name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃͤòʸ»úÎó str ¤ËÊѹ¹¤·¤Þ¤¹¡£
°ú¿ô str ¤Ïʸ»úÎó¤Ç»ØÄꤷ¤Þ¤¹¡£
name ¤òÊѹ¹¤¹¤ë¤È¼ÂºÝ¤ÎÁ÷¿®¥Ç¡¼¥¿¤â±Æ¶Á¤ò¼õ¤±¤ë¤Î¤Çµ¤¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë»ØÄꤷ¤¿Ì¾Á°¤Î¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤¬¤¢¤ì¤Ð¿¿¤òÊÖ¤·¤Þ¤¹¡£
#resets ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Reset#name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃÍ¤È button_name ¤ò == ¤Çʸ»úÎóÈæ³Ó¤·¡¢°ìÃפ·¤¿¤â¤Î¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ì¤Ð true ¤ò¡¢Ìµ¤±¤ì¤Ð false ¤òÊÖ¤·¤Þ¤¹¡£
°ú¿ô¤Ïʸ»úÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Àµµ¬É½¸½¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï #button_with ¤ËÅϤ·¤Æ·ë²Ì¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
#resets ¤Ë´Þ¤Þ¤ì¤Ê¤¤¥Ü¥¿¥ó¤Ïõ¤»¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ë¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤ò¡¢Mechanize::Form::Reset ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤Ë¤·¤ÆÊÖ¤·¤Þ¤¹¡£
¥Õ¥©¡¼¥à¤Ë name °À­¤ÎÀßÄꤵ¤ì¤¿¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
  • <input type="reset" name="***">
#buttons ¤«¤é Mechanize::Form::Reset ¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òõ¤·¤ÆÊÖ¤·¤Æ¤¤¤Þ¤¹¡£name °À­¤Î¤Ê¤¤¥ê¥»¥Ã¥È¥Ü¥¿¥ó¤Ï buttons ¤Ë´Þ¤Þ¤ì¤Ê¤¤¤Î¤Ç¡¢¤³¤Î resets ¤ÎÊÖ¤êÃͤˤâ´Þ¤Þ¤ì¤Þ¤»¤ó¡£
»ÄÇ°¤Ê¤¬¤é reset_with ¤Î¤è¤¦¤Ê¾ò·ïÃê½Ð¥á¥½¥Ã¥É¤Ï¤¢¤ê¤Þ¤»¤ó¡£#button_with ¤È #buttons_with ¤ÇÂåÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
Mechanize 1.0.0 »þÅÀ¤Ç¤Ï¥Õ¥©¡¼¥à¥ê¥»¥Ã¥È¤Îµ¡Ç½¼«ÂΤ¬¤Ê¤¤¤Î¤Ç¡¢type="reset" ¤È¤·¤Æ¤Î¥Ü¥¿¥ó¤Î´üÂÔ¤µ¤ì¤ëÆ°ºî¤ò¼Â¸½¤¹¤ë¼êÃʤ¬¤¢¤ê¤Þ¤»¤ó¡£Mechanize::Form#click_button ¤Ê¤É¤ËÅϤ¹¤ÈÁ÷¿®¥Ü¥¿¥ó¤È¤ß¤Ê¤·¤ÆÁ÷¿®¤ò¹Ô¤¤¤Þ¤¹¡£

¼ÂºÝ¤Ë GET ¤ä POST ¤ÇÁ÷¿®¤¹¤ëʸ»úÎó¤ò¤³¤Î¥Õ¥©¡¼¥à¤Î¸½ºß¤Î¥Ç¡¼¥¿¤«¤éºîÀ®¤·¤ÆÊÖ¤·¤Þ¤¹¡£¥æ¡¼¥¶¡¼¤¬»ÈÍѤ¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
Ä̾ï¤Î GET ¤ä POST ¤Î¾ì¹ç¤Ï Mechanize::Util.build_query_string ¤Ë #build_query ¤ÎÊÖ¤êÃͤ¬ÅϤµ¤ì¤Þ¤¹¡£name ÁêÅö¤¬ nil ¤Î¤â¤Î¡Êname °À­¤Î¤Ê¤¤Á÷¿®¥Ü¥¿¥ó¤Ê¤É¡Ë¤Ï¤³¤³¤ÇÃƤ«¤ì¤Þ¤¹¡£
multipart ¤Î¾ì¹ç¤ÏŬÀڤʥإåÀ¤Ä¤­¤Ç¼Â¥Ç¡¼¥¿¤òÁ÷¿®¤·¤è¤¦¤È¤·¤Þ¤¹¡£Mechanize::Form::FileUpload ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¥µ¡¼¥Ð¤ØÅϤ¹ÆâÍƤò³Îǧ¤·¤¿¤¤¾ì¹ç¤Ï #build_query ¤ÎÇÛÎó¤ò³Îǧ¤¹¤ë¤«¡¢#log ¤òÍ­¸ú¤Ë¤·¤Æ¥í¥°½ÐÎϤò³Îǧ¤¹¤ë¤«¤·¤Æ¤¯¤À¤µ¤¤¡£
¤Ê¤ª¡¢Á÷¿®¤µ¤ì¤ëʸ»úÎó¤Î¥Ú¥¢¤Ï #build_query ¤ÎÇÛÎó¤Î½çÈ֤ˤʤäƤ¤¤Þ¤¹¡£º£¤Î¤È¤³¤í¥é¥¸¥ª¥Ü¥¿¥ó¤Î¤¢¤¿¤ê¤¬ HTML ¾å¤Ç¤Î½Ð¸½½ç¤Ë¤¢¤Þ¤ê±è¤Ã¤Æ¤¤¤Þ¤»¤ó¡£¥µ¡¼¥Ð¤Ë¤è¤Ã¤Æ¤Ï¼«Æ°¥×¥í¥°¥é¥à¤«¤é¤ÎÁ÷¿®¤Ç¤¢¤ë¤³¤È¤ò¤³¤³¤Ç¸¡ÃΤ·¤ÆÃƤ¯¤«¤â¤·¤ì¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë»ØÄꤷ¤¿Ì¾Á°¤ÎÊ£¿ôÆþÎÏÍ󤬤¢¤ì¤Ð¿¿¤òÊÖ¤·¤Þ¤¹¡£
#textareas ¤Ë´Þ¤Þ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î Mechanize::Form::Textarea#name ¥á¥½¥Ã¥É¤ÎÊÖ¤êÃÍ¤È field_name ¤ò == ¤Çʸ»úÎóÈæ³Ó¤·¡¢°ìÃפ·¤¿¤â¤Î¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ì¤Ð true ¤ò¡¢Ìµ¤±¤ì¤Ð false ¤òÊÖ¤·¤Þ¤¹¡£
°ú¿ô¤Ïʸ»úÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Àµµ¬É½¸½¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï #field_with ¤ËÅϤ·¤Æ·ë²Ì¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£
#textareas ¤Ë´Þ¤Þ¤ì¤Ê¤¤Ê£¿ô¹ÔÆþÎÏÍó¤Ïõ¤»¤Þ¤»¤ó¡£

¤³¤Î¥Õ¥©¡¼¥à¤Ë´Þ¤Þ¤ì¤ëÊ£¿ô¹ÔÆþÎÏÍó¤ò Mechanize::Form::Textarea ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤ÆÇÛÎó¤ÇÊÖ¤·¤Þ¤¹¡£
ÆþÎÏÍó¤Î name °À­¤Ïɬ¿Ü¤Ç¤¹¡£¤³¤Î¥Õ¥©¡¼¥à¤Ë name °À­¤ÎÀßÄꤵ¤ì¤¿Ê£¿ô¹ÔÆþÎÏÍ󤬴ޤޤì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¶õ¤ÎÇÛÎó [] ¤òÊÖ¤·¤Þ¤¹¡£
³ºÅö¤¹¤ë HTML ¤Ï°Ê²¼¤ÎÄ̤ꡣ
  • <input type="textarea" name="***">
type="textarea" ¤È¤¤¤¦¤â¤Î¤Ï»ÅÍ;帺ߤ·¤Þ¤»¤ó ¤¬¡¢¤Ê¤¼¤«ÆÃÊÌ°·¤¤¤µ¤ì¤Æ¤ª¤ê¡¢¤Ê¤ª¤«¤ÄËÜÍè¤Î <textarea> ¤Ë¤Ï Mechanize 1.0.0 »þÅÀ¤Ç¤ÏÂбþ¤·¤Æ¤¤¤Þ¤»¤ó¡£
#fields ¤«¤é Mechanize::Form::Textarea ¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òõ¤·¤ÆÊÖ¤·¤Æ¤¤¤Þ¤¹¡£
»ÄÇ°¤Ê¤¬¤é textarea_with ¤Î¤è¤¦¤Ê¾ò·ïÃê½Ð¥á¥½¥Ã¥É¤Ï¤¢¤ê¤Þ¤»¤ó¡£#field_with ¤È #fields_with ¤ÇÂåÍѤ·¤Æ¤¯¤À¤µ¤¤¡£