Watir刮顺序元素:如此简单,但没有

这很简单……我想废弃一些像watir(gem的ruby:)的网页

time1
locus1
locus2
time2
locus3
time3
locus4
locus5
locus6
time4
etc..

结果应该是这样的数组:

 time1 locus1 time1 locus2 time2 locus3 time3 locus4 time3 locus5 time3 locus6 time4 xxx 

所有div都处于同一级别(不是叠加)。 无法使用watir方法找到解决方案… Thx为您提供帮助

对于每个Locus元素,您可以通过#preceding_sibling方法检索前面的Time元素:

 result = browser.divs(class: 'Locus').map do |div| time = div.preceding_sibling(class: 'Time').text locus = div.text "#{time} #{locus}" end p result #=> ["time1 locus1", "time1 locus2", "time2 locus3", "time3 locus4", "time3 locus5", "time3 locus6"] 

请注意,如果列表很长,您可能希望通过Watir检索HTML,然后在Nokogiri中进行解析。 这将节省大量的执行时间,但代价是可读性。

 doc = Nokogiri::HTML.parse(browser.html) # where `browser` is the usual Watir::Browser result = doc.css('.Locus').map do |div| time = div.at('./preceding-sibling::div[@class="Time"]').text locus = div.text "#{time} #{locus}" end p result #=> ["time1 locus1", "time1 locus2", "time1 locus3", "time1 locus4", "time1 locus5", "time1 locus6"]