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 不是很熟悉,但我很确定它会满足您的需求。就像是:

browser.element_by_xpath("some_xpath_magic").click

我还建议您在Watir-general上发布您的问题。

于 2010-02-16T11:39:03.607 回答
1

我没有完整的答案,但您可以使用wiki中概述的 text() 功能(请参阅Searching Inner 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 回答