rails 机械化 .click 未定义的方法 ‘click’ #

rails mechanize .click undefined method `click' for #

我在 rails 中创建了一个机械化任务。很简单

task :estimateone => :environment do
  require 'mechanize'

  mechanize = Mechanize.new
  page = mechanize.get('https://www.theurbanlist.com/brisbane/a-list/50-brisbane-cafes-you-should-have-eaten-breakfast-at')
  page.css('ol li a').each do |link|
    link.click
  end

end

但是我收到这个错误,我做错了什么?

rake aborted!
NoMethodError: undefined method `click' for #<Nokogiri::XML::Element:0x00007ffb4b281830>
/Users/jeremybray/RubymineProjects/OpportunityFinder/lib/tasks/getlead.rake:8:in `block (2 levels) in <top (required)>'
/Users/jeremybray/.rvm/gems/ruby-2.4.2/gems/nokogiri-1.8.4/lib/nokogiri/xml/node_set.rb:204:in `block in each'
/Users/jeremybray/.rvm/gems/ruby-2.4.2/gems/nokogiri-1.8.4/lib/nokogiri/xml/node_set.rb:203:in `upto'
/Users/jeremybray/.rvm/gems/ruby-2.4.2/gems/nokogiri-1.8.4/lib/nokogiri/xml/node_set.rb:203:in `each'
/Users/jeremybray/RubymineProjects/OpportunityFinder/lib/tasks/getlead.rake:7:in `block in <top (required)>'
/Users/jeremybray/.rvm/gems/ruby-2.4.2@global/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
/Users/jeremybray/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `eval'
/Users/jeremybray/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `<main>'

由于 click 是 Mechanize 的一种方法,您应该使用它的实例作为 click 方法的接收者,而不是 link,那是 Nokogiri 方法。

doc 所述,它接收元素,单击它并 returns 获取的页面。

试试:

-- snip --
page.css('ol li a').each do |link|
  mechanize.click(link)
end

Page#links_with 将 return 链接,css 将 return html 元素:

page.links_with(css: 'ol li a').each do |link|
  link.click
end