NoMethodError:未定义的方法`q ='表示nil:NilClass:Mechanize;谷歌刮刮

时间:2012-04-22 09:27:30

标签: ruby mechanize

我正在使用以下代码报废谷歌

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`错误。可能是什么问题?

2 个答案:

答案 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