2013-05-18 186 views
1

我需要在網站上抓取一些信息,該網站上有一個表格,每行包含一個鏈接。watir打開頁面的每個鏈接

我想要點擊表中的每個鏈接,從生成的頁面中獲取一些信息並返回到上一頁。

t = browser.table(:class => "tblElencoProdotti") 

t.links(:class => "TXT10b").each do |l| 
    l.click 
    #do some stuff 
    browser.back 
end 

不幸的是,後面的動作使我對「文檔已到期此文檔不再可用」錯誤。

如果我手動在我的默認ff會話上執行操作並點擊後退箭頭,但如果我在watir打開的窗口中執行此操作,則不起作用。

+0

FF可能依靠其緩存。如果在FF中手動返回後單擊「刷新」,則可能會看到此內容。 –

+0

如果出現上述情況,您必須通過在頁面中存儲您需要的內容來實現自己的「緩存」,而不是告訴WATIR重新獲取它。 –

回答

3

你爲什麼需要每次點擊瀏覽器並返回瀏覽器?

爲什麼不存儲所有的鏈接,然後訪問逐一:

browser.table(:class => "tblElencoProdotti"). 
    links(:class => "TXT10b").map(&:href). 
    each { |url| browser.goto url } 

更新

如果鏈接僅是因爲JavaScript magic點擊,然後再嘗試這樣的事:

links_count = browser.table(:class => "tblElencoProdotti").links(:class => "TXT10b").size 
links_count.times do |index| 
    browser.table(:class => "tblElencoProdotti").links(:class => "TXT10b")[index].click 
    browser.back 
end 

此解決方案應清除緩存。我不確定,但也許有一些更好的方法來重新定位所有內容,而不是依賴已經緩存的元素。

+0

這是所有的JavaScript,我還沒有弄清楚它是如何工作的,所以點擊它是我必須到達我需要的頁面的唯一途徑。 – TopperH

+0

更新了我的答案。 –

0

您可以嘗試此示例代碼以訪問特定表中的所有鏈接,並在訪問頁面上執行任何操作。

links = Array.new 
    ii = 0 
    browser.table(:class => "tblElencoProdotti").links.each{|li| 
     link = Struct.new(:href, :text) 
     links[ii] = link.new(li.href, li.text) 
     ii = ii + 1 
    }   

    links.each { |li|   
       browser.goto(li.href)     
       #Do your stuff     
    } 
相關問題