2

例として次のhtmlを考えてみましょう。練習用に作成したスクラッチシートですが、使用しようとしている実際のhtmlのスニペットが含まれています。

http://www.carbide-red.com/prog/test_table.html

列を見つけようとしていますが、見つけることができる唯一の一貫した識別子は背景色(bgcolor)です。

<tr bgcolor="#ffffcc">
    <td bgcolor="yellow" class="date" align=center>Equipment</td>
    <td bgcolor="#ccccff" align=center class="date"><font color=black>8/12/12</font></td>
    <td bgcolor="#ccccff" align=center class="date"><font color=black>8/19/12</font></td>
    <td bgcolor="#ccccff" align=center class="date"><font color=black>8/26/12</font></td>
    <td bgcolor="#ccccff" align=center class="date"><font color=black>9/2/12</font></td>
    <td bgcolor="red" align=center class="date"><font color=yellow>9/9/12</font></td>
    <td bgcolor="#ccffcc" align=center class="date"><font color=black>9/16/12</font></td>
    <td bgcolor="#ccffcc" align=center class="date"><font color=black>9/23/12</font></td>
    <td bgcolor="#ccffcc" align=center class="date"><font color=black>9/30/12</font></td>
    <td bgcolor="#ccffcc" align=center class="date"><font color=black>10/7/12</font></td>
</tr>

<td>bgcolor=redのを見つけようとしています。次に、そのセルの列インデックスを保存して、それを使用して次の行の同じ列を選択できるようにします。

bgcolor=しかし、タグを検索する方法が見つからないようです。そして、変数に格納する列/行のインデックスをWatirに報告させる方法を見つけることができませんでした。しかし、タグを見つけることができれば、bgcolor=「機器」のように検索して、正しいタグが見つかるまで数えることができます。

「名前」や一意の識別子があるため、HTMLコードが理想的ではないことはわかっていますが、それを変更することはできません。

私はRuby&Watirを初めて使用します。私はPerlでWebサイトを操作しようとしましたが、うまくいきませんでした。Watirを発見し、必要なことを正確に実行しました(そして驚くほど簡単です)が、今はRubyとより細かいセマンティクスを理解しようとしています。

助けてくれてありがとう!

4

3 に答える 3

1

<td bgcolor="red">これを試してのテキストを取得するには:

browser.element(:css => "td[bgcolor=red]").text

あなたは戻ってくるべきです"9/9/12"。要素をクリックするには、 に置き換えtextますclick

そのインデックスを変数に入れるには、これをindex試してください:

index = nil
browser.tds.each_with_index {|td, i| index = i if td.attribute_value("bgcolor") == "red" or td.attribute_value("bgcolor") == "#ff0000"}

index変数は である必要があります5

于 2012-09-10T12:07:24.540 に答える
1

私があなただったら、のこぎりを使います。

doc = Nokogiri::HTML @browser.html
td = doc.at('td[@bgcolor="red"]')
index = td.search('./preceding-sibling::td').length

ページにトリッキーな JavaScript が含まれていない限り、watir よりも mechanize を使用した方がよいでしょう。

于 2012-09-10T04:11:53.920 に答える
0

はい、私が扱っている Web ページは Javascript を使用しているため、Perl で Mechanize::Firefox を使用するのに非常に苦労しました。Watir ははるかにスムーズに動作しました。

提案ありがとう!最初はうまくいきませんでしたが、Google 検索で役に立ち、動作するバージョンを入手することができました。

require "watir"
require "nokogiri"

browser = Watir::Browser.new
browser.goto "http://www.carbide-red.com/prog/test_table.html"

doc = Nokogiri::HTML.parse(browser.html) 
td = doc.at('td[@bgcolor="red"]') 
columnindex = td.search('./preceding-sibling::td').length 

puts columnindex
browser.close

これは「5」を返しました

アップデート:

検索と学習中にこれを見つける可能性のある他の人のために。変数を使用columnindexして行内の特定の列を見つけるには、次のコードを使用します。

textvariable = browser.td(:text => "A58004").parent.td(:index => "#{columnindex}").text
puts "Textvariable: #{textvariable}"

これは<td>、用語「A58004」を含む を検索し、5 番目の列 (0-5) に移動して、そのセルの値を返します。「W=Sa」となる私の元の質問にリンクされているWebページを使用する

于 2012-09-10T13:20:35.797 に答える