2017-03-02 51 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時在頂級分頁頁面之間切換的建議? –