2

基本上我想做的就是将整个 html 表导出到 .txt 文件(记事本文档)。

到目前为止,我已经学会了如何指示浏览器找到带有表格的 html 页面。

require 'rubygems' 
require 'hpricot' 
require "watir-webdriver" 
url = "http://www.example.com"
browser = Watir::Browser.new 
browser.goto url

在 cmd 中运行上述内容后,我现在可以在浏览器中看到 html 表。

这就是我卡住的地方。我如何使用 Watir

  1. 找到标签
  2. 收集 and 中的所有内容(即 html 和文本)。
  3. 将这些结果提取到 .txt 文件(记事本文档)并将其保存在特定文件夹中。

仅供参考,html表看起来像这样......

<table border="1" cellpadding="2">
<tr>
<th> Address </th>
<th> Council tax band </th>
<th> Annual council tax </th>
</tr>

<tr>
<td> 2, STONELEIGH AVENUE, COVENTRY, CV5 6BZ </td>
<td align="center"> F </td>
<td align="center"> &pound;2125 </td>
</tr>

.......上面的行重复了很多次......

</table> 

然后桌子关闭。

所以重新限制我的情况。我可以使用 Watir 将浏览器导航到包含 html 表的页面,但我的问题是我不确定如何将结果(标签中的所有内容 - 包括 html)提取到 .txt 文件,然后保存该 .txt文件到我的电脑上。

我更愿意在使用 Watir 时采取更小的步骤。我对此很了解,因此我只想学习如何提取表格并将我提取的所有内容保存到 .txt 文件中。我在网上看到了几个使用 hpricot 的例子。但是,大多数示例似乎都遗漏了详细说明如何将数组(如果这是正确的方法)输出到 .txt 文件中的代码。

您能否通过演示如何编写一段简单的代码来提供帮助,该代码将提取 html 表(以及所有内容,包括 ,以及介于两者之间的所有内容)到 .txt 记事本文件?

非常感谢您的时间。


DataTables 在表下放置搜索和条目过滤器?

我可以将显示整体过滤器放在表格下方而不是表格上方的搜索过滤器中吗?

请参阅:http ://datatables.net/release-datatables/examples/basic_init/alt_pagination.html

而且我知道我可以放置 een position : absolute 和东西,但我想要那些东西的 HTML 代码在桌子下面。

4

2 回答 2

4

获取整个表格的 HTML(如果它是页面上唯一的表格):

browser.table.html

你会得到这样的东西:

=> "<table border=\"1\" cellpadding=\"2\">\n<tbody><tr>\n<th> Address </th>\n<th> Council tax band </th>\n<th> Annual council tax </th>\n</tr>\n\n<tr>\n<td> 2, STONELEIGH AVENUE, COVENTRY, CV5 6BZ </td>\n<td align=\"center\"> F </td>\n<td align=\"center\"> £2125 </td>\n</tr>\n\n</tbody></table>"

要获取每一行的 HTML 并将其放入数组中:

browser.table.trs.collect {|tr| tr.html}

=> ["<tr>\n<th> Address </th>\n<th> Council tax band </th>\n<th> Annual council tax </th>\n</tr>",
    "<tr>\n<td> 2, STONELEIGH AVENUE, COVENTRY, CV5 6BZ </td>\n<td align=\"center\"> F </td>\n<td align=\"center\"> £2125 </td>\n</tr>"] 

要获取每个单元格的文本并将其放入数组中:

browser.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
=> [["Address", "Council tax band", "Annual council tax"],
    ["2, STONELEIGH AVENUE, COVENTRY, CV5 6BZ", "F", "£2125"]] 

要将每个单元格的文本写入文件:

content = b.table.trs.collect {|tr| [tr[0].text, tr[1].text, tr[2].text]}
File.open("table.txt", "w") {|file| file.puts content}

该文件将如下所示:

Address
Council tax band
Annual council tax
2, STONELEIGH AVENUE, COVENTRY, CV5 6BZ
F
£2125
于 2011-12-02T12:26:33.190 回答
2

有很多方法可以解决这个问题,如果我们对您具体要完成的工作有更多了解,那么我们可以为您提供更具体而不是笼统的答案。

.collect如果要将内容转换为数组,可以使用Zeljko 显示的方法。如果您只想处理数据或遍历表中的行和单元格,那么.each或者.each_with_index可能是您想要的。

我怀疑你真的想要表格中的文本,而不是 HTML。所以这里有一些可以尝试的东西(未经测试,但应该可以)

browser.table(:how => what).rows.each_with_index do |row, r|
  row.cells.each_with_index do |cell, c|
    puts "Row:#{r} Cell:#{c} text is: #{cell.text}"
  end
end

如果上述方法.rows.cells不起作用(未知方法),请尝试分别替换为.trs.tds(并非所有版本的 watir 都具有这些方法的友好别名)

看看是否会吐出您感兴趣的内容。如果是这样,您应该能够轻松修改以将您想要的内容写入文件而不是将其放到屏幕上。

但是,如果验证是您的目标,那么让自动化代码在数据库中查找内容并为您进行比较可能会更容易。

于 2011-12-02T18:29:07.573 回答