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. および内にあるすべて(つまり、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の位置を置くことができることを知っています:絶対的なものですが、私はそれらのものの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 に答える