【问题标题】:Ruby: Capybara find() Element not foundRuby:Capybara find() 未找到元素
【发布时间】:2017-01-17 23:04:44
【问题描述】:

def perform_search

fill_in 'q', :with => @skillset
fill_in 'l', :with => @region
find('#fj').click
find("#refineresults", text: "date").click_link
sleep(1)
end

来源:https://github.com/jmopr/job-hunter/blob/master/scraper.rb

通过单击日期超链接,尝试让 Indeed.com 按日期而不是相关性进行排序。谁能指出我在代码中的第 4 行出了什么问题?

【问题讨论】:

  • 您尝试点击的 HTML 是什么样的?
  • 太大,无法复制粘贴。

标签: ruby-on-rails xpath web-scraping web-crawler capybara


【解决方案1】:

click_link 接受参数来识别它要点击的链接。要点击 div 中的“日期”链接,您可以这样做

find("#refineresults").click_link("date")

如果您想手动查找元素而不是使用 click_link,您会这样做

find("#refineresults a", text: "date").click

虽然我认为之前的解决方案更清楚你实际在做什么

注意:以后发布问题时,请发布您的代码产生的实际错误,这将使人们更容易帮助您

【讨论】:

  • @user3787179 这是在我的答案中运行第一个选项的错误(因为它与您的任何原始代码行的错误一样没有任何意义)?如果是这样,那么您不在精炼结果 div 中包含“日期”链接的页面上 - 检查 page.html 以确认
  • 效果很好,你能告诉我为什么在#refineresults 后面加一个空格和一个“a”吗?
  • 不确定,对不起。我删除了评论,你的代码有效。
  • @user3787179 在find("#refineresults a", text: "date").click 中,#refineresults a 是一个 CSS 选择器,它表示找到一个 'a' 元素,它是一个 id 为refineresults 的元素的后代(空格 - developer.mozilla.org/en-US/docs/Web/CSS/Descendant_selectors)。 text: "date" 然后表示找到的 'a' 元素必须包含文本 "date" - 然后单击它。第一个选项找到 id 为refineresults 的元素,然后将搜索范围限定为指向该元素内部的链接——只有两种获得相同结果的方法
猜你喜欢
  • 1970-01-01
  • 2018-12-17
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 2018-02-15
  • 1970-01-01
相关资源
最近更新 更多