从每个元素中获取文本

get text from each element

需要获取金额文本并检查它是否 < 5000 然后单击 class

中的下一个元素
<div class="single sort">
    <div class="svariant front one" id="114_0">
        <img src="http://pics.avs.io/al_square/24/24/TK@2x.png" class="airlogo"    title="Turkish Airlines">
        <div class="amount">4 479
            <span class="rub">Р</span>
        </div>
      <a href="/travel/Order/Index/h7676Rn7471rdd?fid=349&amp;come=0" class="yellow front">BUY</a>
    </div>
</div>

<div class="single sort">
    <div class="svariant front one" id="113_0">
        <img src="http://pics.avs.io/al_square/24/24/TK@2x.png" class="airlogo"    title="Turkish Airlines">
        <div class="amount">9 479
            <span class="rub">Р</span>
        </div>
        <a href="/travel/Order/Index/h7676Rn7471rdd?fid=349&amp;come=0" class="yellow front">BUY</a>
    </div>
</div>

如果我得到的值 < 5 000 我点击了 'index +1'。这个循环怎么做?

browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text

以这种方式格式化文本

sum = browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text
sum.gsub!(/[^0-9]/, '')
sum = sum.to_i

您可以创建一个 Range 然后对其进行迭代,这样可以增加索引。这是一个骇人听闻的人为示例:

(0..1).each do |i|
  amount =  b.div(:class => 'single sort', :index => i).div(:class, 'amount').text.gsub!(/\D/, "")
  amount = amount.to_i
  next if amount < 5000
  puts amount               #=> 9479
end

由于 HTML 片段中没有 <a> 标签,因此不清楚应该点击什么,但您可以将 puts amount 替换为 click 操作.

这是更通用的方法,对于给定元素的任何范围,没有硬编码 (0..1),有 2 个元素,或 324834 :)

b.divs(:class => 'single sort').each {|x| if x.text.gsub!(/\D/, "").to_i<5000; puts x.text; else; puts "The value is #{x.text}"; end}

与其在小于 5000 的元素之后查找第一个,我认为查找第一个大于或等于 5000 的元素会更容易。这样看问题,你可以简单地创建一个 div 的元素集合。然后find第一个符合指定条件的文本

match = browser.divs(class: 'single sort').find do |div|
    div.div(class: 'amount').text.tr('^0-9', '').to_i >= 5000
end
match.link(class: 'yellow front').click

如果您希望查找小于 5000 的后的第一个,则可以改用 drop_while 方法。将不符合条件的去掉后,集合中的第一个元素会大于5000

matches = browser.divs(class: 'single sort').drop_while do |div|
    div.div(class: 'amount').text.tr('^0-9', '').to_i < 5000
end
matches.first.link(class: 'yellow front').click