我有一个html表,其中每行的列数不等。表和单元格/列没有标识符,例如id,name,class等。如何迭代这样的表并以表格形式打印?我现在正在使用ruby 1.8。
Html -
<table>
<tr><td colspan="2">Student Info</td></tr>
<tr><td>Age:</td> <td>15</td></tr>
<tr><td>Home:</td> <td>251 Palm Avenue</td></tr>
<tr><td>City:</td> <td>New York</td></tr>
<tr><td colspan="2">Parent Info</td></tr>
<tr><td>Parent Phone:</td> <td>231-1234-123</td></tr>
<tr><td>More parent info</td> <td><a href="http://www.school.com>school</a><br></td></tr>
</table>
Ruby代码 -
require 'rubygems'
require 'watir-webdriver'
url = "url has tables with no identifiable attributes. Just a table tag"
browser = Watir::Browser.new :firefox
browser.goto url
browser.table.trs.each do |tr|
tr.each do |td|
puts td.to_s
end
end
跟踪 -
C:/ruby/lib/ruby/gems/1.8/gems/watir-webdriver-0.6.2/lib/watir-webdriver/elements/element.rb:553:in `method_missing': undefined method `each' for #<Watir::TableRow:0x517bf9c> (NoMethodError)
from tables.rb:10
from C:/ruby/lib/ruby/gems/1.8/gems/watir-webdriver-0.6.2/lib/watir-webdriver/element_collection.rb:29:in `each'
from C:/ruby/lib/ruby/gems/1.8/gems/watir-webdriver-0.6.2/lib/watir-webdriver/element_collection.rb:29:in `each'
from tables.rb:9
答案 0 :(得分:1)
只需抓住表格,然后将其发送到迭代行并在元素之间放置标签的文件(或变量)
browser = Watir::Browser.new :firefox
browser.goto url
f = File.new('table.txt', 'w+')
t = browser.table
t.trs.each do |trd|
trd.tds.each do |td|
f.print "#{td.text}\t"
end
f.print "\n"
end
f.close
编辑**回答评论中的问题:
好吧,不要对自己很难,我不认为这些文档对初学者友好。我不得不从Justin_Ko所说的内容和文档中进行推断,以查看tr
引用的文档以及trs
引用的集合。要记住的是,那些集合以及WATIR方法返回的大部分内容都是对象,但它们可能没有你想象的那样。 trs
是一个枚举器,但它只返回对象,而不是行本身的文本。与td
相同。这就是我必须遍历行集合然后遍历每一行的td
对象,然后在该对象上调用.text
的原因。以这种方式考虑WATIR,您可以通过类或标识符引用任何内容,或者在这种情况下仅通过HTML元素引用。 browser
读取页面中的所有内容,从那里您可以使用WATIR方法定位任何元素。
备忘单非常方便: