從form.submit.search
刪除搜索,即form.submit
我猜你正在追加搜索以提交它認爲它與提交按鈕的值有關,即搜索。
你在做什麼代碼是成功提交表單。但是,您正在使用零參數調用生成的頁面對象的搜索方法。搜索方法期望一個選擇器,例如'body div#nav_bar ul.links li'
作爲參數返回匹配該選擇器的元素數組。當然,沒有元素將匹配一個零選擇器,因此是空的數組。按您迴應
編輯:
您的代碼:
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
=> []
我嘗試和開始工作:
Ruby腳本/控制檯
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"
…
頁面對象的搜索方法的行爲類似於Nokogiri的搜索方法,因爲它接受一系列CSS選擇器和/或XPath查詢,並返回匹配元素的可枚舉對象。例如
page.search('h3.r a.l', '//h3/a[@class="l"]')
您好。我不確定你是什麼意思。上面的代碼「=> []」指的是我輸入提交後返回的值。 你如何將參數傳遞給搜索?這段代碼適用於沒有參數的Facebook和谷歌,爲什麼他們在這裏是必要的? – 2009-12-08 15:27:29
好的。我會暫時接受答案。然而,「非常長的HTML元素陣列」,生成的只是再生的形式(就大學而言)。提交後返回的信息是= agent.page.forms。在瀏覽器中進行真正的搜索會產生大量的類,並且不同意這種返回。我將.search添加到form.submit中,因爲我不確定如果我真的在提交表單或使用submit命令觸擊清除按鈕。顯然,錯誤的道路。 還剩下機械化不會返回有關owens的任何有效信息。它可以是https或cgi嗎? – 2009-12-08 21:03:31
就我個人而言,我認爲這是網站特有的問題。我不確定這是否是HTTPS問題,儘管我懷疑這是機械化原本應該如此使用的原因。無論如何,你的問題讓我非常惱火,所以我會深入研究一下,看看我能不能達到底線。 – 2009-12-08 21:10:34