刷新Capybara的会话DOM内容

时间:2017-03-02 11:56:42

标签: ruby selenium capybara capybara-webkit

我正在尝试使用Selenium / Capybara解析网站。现在它看起来像这样:

session = Capybara::Session.new(:selenium)

session.visit "https://somesite.com/page1"

element = session.all( :css, '.table .row a' ).each do |el|
  el.click

  # get some element's data

  session.evaluate_script('window.history.back()')
end

# repeat

问题是,当我试图从我所在的第二页获取数据时,Capybara告诉我Either the element is no longer attached to the DOM or the page has been refreshed.绝对有道理,但是我很难找到方法创建一个新的DOM变量并在文档中解析它。

如果我导航回尝试重复操作并单击连续的第二个链接,则会发生同样的事情。我假设我需要重新创建会话,还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

像你一样努力尝试你需要保持一个计数器,每次通过你的循环找到元素 -

counter = 0
while (el = session.all( :css, '.table .row a', minimum: 1 )[counter]) do
  el.click

  # get some element's data

  counter += 1
  session.go_back
end

或者如果链接只是标准的,你可以收集hrefs,然后只是访问它们

element = session.all( :css, '.table .row a', minimum:1 ).map {|a| a['href']} do |url|
  session.visit(url)

  # get some element's data

end