刷新 Capybara 的会话 DOM 内容
Refresh Capybara's session DOM contents
我正在尝试使用 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 变量并在文档中对其进行解析。
如果我返回尝试重复操作并连续单击第二个 link,则会发生同样的事情。我假设我需要重新创建会话或者是否有更好的方法?
要像您尝试的那样工作,您将需要保留一个计数器并在每次循环中查找元素 - 类似于
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
或者如果链接只是标准链接,您可以收集 href,然后访问它们
element = session.all( :css, '.table .row a', minimum:1 ).map {|a| a['href']} do |url|
session.visit(url)
# get some element's data
end
我正在尝试使用 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 变量并在文档中对其进行解析。
如果我返回尝试重复操作并连续单击第二个 link,则会发生同样的事情。我假设我需要重新创建会话或者是否有更好的方法?
要像您尝试的那样工作,您将需要保留一个计数器并在每次循环中查找元素 - 类似于
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
或者如果链接只是标准链接,您可以收集 href,然后访问它们
element = session.all( :css, '.table .row a', minimum:1 ).map {|a| a['href']} do |url|
session.visit(url)
# get some element's data
end