从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