2017-05-24 33 views
1

我有显示产品详细信息如下方式HTML:Ruby代码显示表元素的细节

<div class="column"> 
    <h3 class="hidden-xs">Product Details</h3> 
    <table class="table table-striped"> 
     <tbody> 
      <tr class="header-row hidden-xs"> 
       <th>Product</th> 
       <th>Duration</th> 
       <th>Unit Price</th> 
       <th>Price</th> 
      </tr> 
      <tr> 
       <td>google.com</td> 
       <td>1 Year</td> 
       <td class="hidden-xs">$5</td> 
       <td>$5</td> 
      </tr> 
     </tbody> 
    </table> 
    <div class="totals text-right"> 
    <p>Subtotal: $5</p> 
    <p>Total: $5</p> 
    </div> 
</div> 
下面

Ruby代码给出:

require 'watir' 

browser = Watir::Browser.new(:chrome) 

browser.goto('file:///C:/Users/Ashwin/Desktop/text.html') 

browser.table(:class, 'table table-striped').trs.each do |tr| 
p tr[0].text 
p tr[1].text 
p tr[2].text 
p tr[3].text 
end 

我得到的输出这方法:

"Product" 
"Duration" 
"Unit Price" 
"Price" 
"google.com" 
"1 Year" 
"$5" 
"$5" 

但我想显示如下细节:

Product : google.com 
Duration : 1 Year 
Unit Price : $5 
Price  : $5 

任何人都可以请帮忙吗?

+0

如果你想刮一个HTML,为什么你不使用nokogiri? – Adrian

+0

我想要这样,因为它简单,我想学习 – userash

+0

这不可能吗? – userash

回答

2

表看起来很简单的给定的表,所以你可以使用Table#strings方法表转换成字符串数组。然后,您可以输出每个列标题与每个行值。

# Get the table you want to work with 
table = browser.table(class: 'table table-striped') 

# Get the text of the table 
rows = table.strings 

# Get the column headers and determine the longest one 
header = rows.shift  
column_width = header.max { |a, b| a.length <=> b.length }.length 

# Loop through the data rows and output the header/value 
rows.each do |row| 
    header.zip(row) do |header, value| 
    puts "#{header.ljust(column_width)} : #{value}" 
    end 
end 
#=> Product : google.com 
#=> Duration : 1 Year 
#=> Unit Price : $5 
#=> Price  : $5 
+0

非常感谢Justin – userash

0

此代码仅适用于具有两排

require 'watir' 

browser = Watir::Browser.new(:chrome) 

browser.goto('file:///C:/Users/Ashwin/Desktop/text.html') 

browser.table(:class, 'table table-striped').rows.each_with_index do |row,index| 
    if index.eql?0 
    firstRow=row 
    next 
    end 
    p firstRow[0].text+":"+row[0].text 
    p firstRow[1].text+":"+row[1].text 
    p firstRow[2].text+":"+row[2].text 
    p firstRow[3].text+":"+row[3].text 
end 
+0

非常感谢RAJ – userash