1

我需要在一个网站上抓取一些信息,该网站有一个表格,每行都包含一个链接。

我希望 watir 单击该表中的每个链接,从生成的页面中获取一些信息并返回上一页。

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

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

不幸的是,后面的操作让我看到“文档已过期,此文档不再可用”错误。

如果我在我的默认 ff 会话上手动执行操作并点击后退箭头,则此方法有效,但如果我在打开的窗口中执行此操作,不知何故它不起作用。

4

2 回答 2

3

Any reason why you need to actually click and go to back with browser each time?

Why not store all the links and then visit them one by one:

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

Update:

If the links are only clickable due to JavaScript magic, then try something like this:

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

This solution should clear the cache. I'm not sure, but maybe there's some better way to relocate everything and not rely on already cached elements.

于 2013-05-19T16:56:40.360 回答
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                   
    }
于 2013-05-20T10:15:13.287 回答