4

Webサイトに表示されるブロックを自動化し、CMSテーブルを介してそのコンテンツを比較しようとしています。問題は、UIに表示されるブロックを自動化できたのですが、管理者としてログインし、反復を使用してテーブルのコンテンツを配列に保存しようとすると、失敗します。

<table id="nodequeue-dragdrop" class="nodequeue-dragdrop sticky-enabled tabledrag-processed sticky-table">
<thead class="tableHeader-processed">
<tbody>
  <tr class="draggable odd">
    <td>
      <a class="tabledrag-handle" href="#" title="Drag to re-order">
      <a href="/car-news/moscow/new-text-1">New Text 1</a>
    </td>
    <td>
    <td>2012-06-06 10:24</td>
    <td style="display: none;">
    <td>
    <td>
    <td class="position">1</td>
  </tr>
  <tr class="draggable even">
    <td>
      <a class="tabledrag-handle" href="#" title="Drag to re-order">
      <a href="/car-news/new-cars/text-2">Text 2 </a>
    </td>
    <td>
    <td>2012-06-06 10:29</td>
    <td style="display: none;">
    <td>
    <td>
    <td class="position">2</td>
  </tr>
  <tr class="draggable odd">
    <td>
      <a class="tabledrag-handle" href="#" title="Drag to re-order">
      <a href="/car-news/new-cars/this-is-text-3">This is Text 3</a>
    </td>
    <td>
    <td>2012-06-05 12:55</td>
    <td style="display: none;">
    <td>
    <td>
    <td class="position">3</td>
  </tr>

私が使用しているコードは

@text = Array.new
  x = 1
  y = 0

  until x == 10
    y = x -1

   until y == x
    @text[y] = @browser.table(:id,'nodequeue-dragdrop').tbody.row{x}.cell{1}.link(:href =>/car-news/).text

    puts @text[y]
    y=y+1  
   end

  x=x+1
 end

問題は、スクリプトが正常に実行されることですが、反復を設定したとしても、スクリプトは1番目の要素のみを読み取り、テキストを表示し、2番目の3番目の要素には移動しません。

4

3 に答える 3

6

Justinは、コレクションを反復処理するためのrubyの組み込みメソッドを使用して正しい方向に進んでいます。しかし、これを考慮してください。私があなたのコードを正しく読んでいるなら、あなたはあなたが特定のリンクからのテキストを追いかけていることを知っています、それであなたがちょうど一致するリンクのコレクションを作ることができるのになぜ行を繰り返すのですか?

link_text_array = Array.new
@browser.table(:id,'nodequeue-dragdrop').links(:href => /car-news/) do |link|
  link_text_array << link.text
end
于 2012-06-15T06:21:35.123 に答える
6

行/列を反復処理するための組み込みメソッドがあります。これを試して:

table_array = Array.new
table = @browser.table(:id,'nodequeue-dragdrop')
table.rows.each do |row|
    row_array = Array.new
    row.cells.each do |cell|
        row_array << cell.text
    end
    table_array << row_array
end
puts table_array  # This will be an array (row) of arrays (column)
于 2012-06-07T13:29:14.433 に答える
0

私の問題の解決策を見つけました

行の代わりに{}私はtds{}を使用しました。つまり、コードを次のように変更しました。

@text[y] = @browser.table(:id,'nodequeue-dragdrop').tbody.tds{x}.cell{1}.link(:href =>/car-news/).text

私が望むように動作します。

于 2012-06-10T10:07:59.107 に答える