我正在尝试使用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变量并在文档中解析它。
如果我导航回尝试重复操作并单击连续的第二个链接,则会发生同样的事情。我假设我需要重新创建会话,还是有更好的方法?
答案 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