watir打开页面的每个链接

时间:2013-05-18 21:41:58

标签: ruby watir watir-webdriver

我需要在一个网站上抓一些信息,这个网站的每一行都包含一个链接。

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

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

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

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

如果我在默认的ff会话中手动执行操作并点击后退箭头,则此方法有效,但如果我在watir打开的窗口中执行此操作,它将无法正常工作。

2 个答案:

答案 0 :(得分: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

此解决方案应清除缓存。我不确定,但也许有更好的方法来重新定位所有内容而不是依赖已经缓存的元素。

答案 1 :(得分: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                   
    }