2017-03-02 53 views
0

我想解析一个网站使用Selenium /水豚。现在它看起来是这样的:刷新水豚的会话DOM内容

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 

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

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

回答

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 
+0

谢谢你这个伟大的答案。我将用第二个例子 - 我认为如果直接切换页面,会节省一些时间。有关如何在完成一页HREF时在顶级分页页面之间切换的建议? –