0

私は次のコードを使用してグーグルを廃棄しています

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はnil:NilClass`エラーのためにq='を取得します。何が問題なのですか?

4

2 に答える 2

5

ドキュメントのサンプルコードを使用しています。Google検索にその名前のフォームはありません。「gbqf」を試してください。ただし、ロケールやさまざまな設定によって異なる場合があります。mechanizeを使用している場合は、「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
于 2012-04-23T19:43:05.473 に答える
0

qエラーは、のインスタンスでメソッドを呼び出していることを意味しますNilClass。これは、page.form_with(:name => 'f')失敗した場合に発生するため、最終的にはgoogle_formになりnilます。

于 2012-04-22T09:32:07.067 に答える