Ruby - Watir宝石抓取链接

时间:2012-10-26 19:12:02

标签: ruby watir ruby-1.9

有没有办法让所有链接都有一个属性?

在树下,我得到了很多这些标签:

<div class="name">
<a hef="http://www.example.com/link">This is a name</a>
</div>

有没有办法做这样的事情:b.links(:class, "name")它会输出所有div名称类的所有超链接和标题?

3 个答案:

答案 0 :(得分:2)

明确地说明了如何描述有关属性的浏览器对象,这就是你必须这样做的方式。否则,@ SporkInventor的答案就是链接属性。

@myLinks = Array.new
@browser.divs(:class => "name").each do |d|  
   d.links.each {|link| @myLinks << link }
end
  1. 创建一个新阵列以收集我们的链接。
  2. 对于浏览器中每个等于“name”的div,抓住所有链接并将它们放入数组中。

    @ myLinks.each {| link | put link.href} #etc等

答案 1 :(得分:2)

在这种情况下我会使用css选择器:

#If you want all links anywhere within the div with class "name"
browser.links(:css => 'div.name a')

#If you want all links that are a direct child of the div with class "name"
browser.links(:css => 'div.name > a')

或者如果您更喜欢xpath:

#If you want all links anywhere within the div with class "name"
browser.links(:xpath => '//div[@class="name"]//a')

#If you want all links that are a direct child of the div with class "name"
browser.links(:xpath => '//div[@class="name"]/a')

示例(css)

假设你有一个HTML:

<div class="name">
    <a href="http://www.example.com/link1">
        This link is a direct child of the div
    </a>
</div>
<div class="stuff">
    <a href="http://www.example.com/link2">
        This link does not have the matching div
    </a>
</div>
<div class="name">
    <span>
        <a href="http://www.example.com/link3">
            This link is not a direct child of the div
        </a>
    </span>
</div>

然后css方法会给出结果:

browser.links(:css, 'div.name a').collect(&:href)
#=> ["http://www.example.com/link1", "http://www.example.com/link3"]

browser.links(:css, 'div.name > a').collect(&:href)
#=> ["http://www.example.com/link1"]

答案 2 :(得分:0)

我不认为可以通过开箱即用的方式来完成。

然而,使用'waitr-webdriver'可以完全按照你的类型完成。

irb(main):001:0> require 'watir-webdriver'
=> true
irb(main):002:0> b = Watir::Browser.new :firefox
=> #<Watir::Browser:0x59c0fcd6 url="about:blank" title="">
irb(main):003:0> b.goto "http://www.stackoverflow.com"
=> "http://stackoverflow.com/"
irb(main):004:0> b.links.length
=> 770
irb(main):005:0> b.links(:class, 'question-hyperlink').length
=> 91