2

私は、Watir、Nokogir、および Hpricot を使用して実験を行っています。これらはすべて、私の問題であるトップダウンアプローチを使用しています。つまり、要素タイプを使用して要素を検索します。要素の種類を知らずに、テキストを使用して要素を見つけたい。例えば

<element1> 
    <element2> Text2 </element2>
    <element3> Text3 </element3>
     text4
</element1>

私が欲しいのは、Text2とText3を検索して、element2とelement1などを取得することです。

要素が div なのか、tr/tds なのか、リンクなのか、私にはわからないことに注意してください。私はテキストだけを知っています。アルゴリズムは次のようにする必要があります。すべての要素を反復処理し、内部テキストに一致し、一致する場合は要素と親要素を取得します。

これが何らかの方法で可能かどうか教えてください。

4

2 に答える 2

1

WatirはXPathをサポートしています。私はXPathにあまり詳しくありませんが、XPathが必要なことを実行できると確信しています。何かのようなもの:

browser.element_by_xpath("some_xpath_magic").click

また、 watir-generalに質問を投稿することをお勧めします。

于 2010-02-16T11:39:03.607 に答える
1

完全な答えはありませんが、wikiで概説されている text() 機能を使用できます (内部 HTML の検索を参照してください)。

doc.search("*[text()='Text3']")

戻ります

#<Hpricot::Elements[{elem <element3> " Text3 " </element3>}, " Text3 "]>

次に、これらを繰り返し処理して、それらが実際の要素であることを確認できます。

doc.search("*[text()='Text3']")[0].elem?

戻りtrueます。一方[1]、戻りfalseます。text4ただし、これが返されるときに見つけようとしていた場合、これが落ちるのは次のとおりです。

#<Hpricot::Elements["\n     text4\n"]>

つまり、実際の要素ではありません。したがって、おそらくこれらのインスタンス(これらのインスタンスをどのように判断するかはわかりません)で、それが要素であるかどうかを確認し、falseの場合は親を取得できます

doc.search("*[text()='text4']")[0].parent

申し訳ありませんが、完全な答えはありませんが、「text()」のことは今のところ言及する価値があると思いました。

于 2010-02-15T17:05:43.067 に答える