から検索を削除します。つまり、送信ボタンの値、form.submit.search
つまりform.submit
検索と関係があると考えて、送信するために検索を追加していると思います。
あなたがコードしていることは、フォームを正常に送信することです。ただし、結果のページオブジェクトの検索メソッドをnil引数で呼び出しています。searchメソッドは、セレクター'body div#nav_bar ul.links li'
がそのセレクターに一致する要素の配列を返すための引数として、セレクターを想定しています。もちろん、nilセレクターに一致する要素はないため、空の配列になります。
応答ごとに編集します。
あなたのコード:
ruby script/console
require 'mechanize'
agent = WWW::Mechanize.new
agent.get("https://www.owens.edu/cgi-bin/class.pl/")
agent.page.forms
form = agent.page.forms.last
form.occ_subject = "chm"
form.submit.search
=> []
私が試し、仕事に取り掛かったこと:
ルビースクリプト/コンソール
require 'mechanize'
agent = WWW::Mechanize.new
agent.get("https://www.owens.edu/cgi-bin/class.pl")
agent.page.forms
form = agent.page.forms.last
form.occ_subject = "chm"
form.submit # <- No search method.
=> Insanely long array of HTML elements
同じコードはGoogleでも機能しません:
require 'mechanize'
require 'nokogiri'
agent = WWW::Mechanize.new
agent.get("http://www.google.com")
form = agent.page.forms.last
form.q = "stackoverflow"
a = form.submit.search
b = form.submit
puts a
=> [] # <--- EMPTY!
puts b
#<WWW::Mechanize::Page
{url
#<URI::HTTP:0x1020ea878 URL:http://www.google.co.uk/search?hl=en&source=hp&ie=ISO-8859-1&q=stackoverflow&meta=>}
{meta}
{title "stackoverflow - Google Search"}
{iframes}
{frames}
{links
#<WWW::Mechanize::Page::Link
"Images"
"http://images.google.co.uk/images?hl=en&source=hp&q=stackoverflow&um=1&ie=UTF-8&sa=N&tab=wi">
#<WWW::Mechanize::Page::Link
"Videos"
…
ページオブジェクトの検索メソッドは、CSSセレクターやXPathクエリのシーケンスを受け入れ、一致する要素の列挙可能なオブジェクトを返すという点で、Nokogiriの検索メソッドと同じように動作します。例えば
page.search('h3.r a.l', '//h3/a[@class="l"]')