Ruby Mechanize点击不起作用

时间:2016-08-16 21:31:22

标签: ruby web-scraping automation nokogiri mechanize

这是我现在代码的抓取部分

while counter <= 3
  url = "http://www.indeed.ca/jobs?q=" << job_title_search << "&l=" << job_location << ",+ON&start=" << (counter * 20).to_s
  counter += 1
  doc = Nokogiri::HTML(open(url))

  # can't put in if loop to only perform once for some reason
  page = agent.get(url)

  current_page = agent.page.uri
  puts current_page

  doc.css(".result").each do |item|
    job_title = item.at_css(".jobtitle").text[/[^\s][a-zA-Z -]*/]
    job_company = item.at_css(".company").text[/[^\s][a-zA-Z -]*/]
    full_job = job_title + " - " + job_company

    agent.current_page.link_with(:class => '.jobtitle').click
    posting_page = agent.page.uri
    puts posting_page

    if cache.include?(full_job) == false
      cache << full_job
      puts "#{job_title} - #{job_company}"
    end
  end

  puts ""
end

我知道'.jobtitle'类存在,因为返回位置标题的部分工作正常。我想弄清楚的是为什么Mechanize不允许我使用'click'功能。在我在维基百科主页上完成的其他测试中,它在CSS ID,类和&amp ;;文本。

所以我的问题是它导致点击功能失败的原因是什么?它生成的错误是通用的“未定义方法”,单击“为nil:NilClass”。

1 个答案:

答案 0 :(得分:0)

错误消息告诉我们您调用click方法的对象是nil。你在这里打电话给click

agent.current_page.link_with(:class => '.jobtitle').click

...因此,我们可以推断,您对link_with的调用正在返回nil

我认为这是失败的,因为您的网页没有class属性等于.jobtitle的链接。相反,您的网页可能包含class属性等于jobtitle的链接。所以:

agent.current_page.link_with(:class => 'jobtitle').click