我正在使用以下代码报废谷歌
def google_search(query)
page = @agent.get('http://www.google.com')
google_form = page.form_with(:name => 'f')
google_form.q = query
page = @agent.submit(google_form)
page
end
但有时我得到NoMethodError: undefined method
q ='为nil:NilClass`错误。可能是什么问题?
答案 0 :(得分:5)
您正在使用文档中的示例代码,在Google搜索中没有具有该名称的表单,请尝试使用“gbqf”,但根据区域设置或各种设置,它可能会有所不同。当你使用机械化时,使用“pp”在开发过程中漂亮地打印元素,看看你正在寻找什么,然后去下一步。
使用.rb示例(从http://mechanize.rubyforge.org/EXAMPLES_rdoc.html更新)以通过查询获得前10个结果。
require 'rubygems'
require 'mechanize'
a = Mechanize.new { |agent|
agent.user_agent_alias = 'Mac Safari'
}
a.get('http://google.com/') do |page|
search_result = page.form_with(:name => 'gbqf') do |search|
search.q = 'ruby mechanize'
end.submit
search_result.search(".//a[@class='l']").each_with_index.map do |link, i|
puts "#{i} #{link.content}"
end
end
答案 1 :(得分:0)
该错误表示您在q
的实例上调用方法NilClass
。如果page.form_with(:name => 'f')
失败,则会发生这种情况,因此google_form
最终成为nil
。