我正在HTML文档中查找文本:"必需"。我需要找到的是包含文本的元素。例如:
<p>... Required<p>
我会得到元素名称=p
但是,它可能不在<p>
标记中。它可以在任何类型的标签中,这就是这个问题与其他一些搜索文本Stack Overflow问题不同的地方。
现在我使用的是:
page.at(':contains("Required")')
但这只会给我完整的HTML元素
问题是:contains
伪类匹配其子代中任何位置都有搜索文本的任何元素。您需要找到包含此类文本的最里面的元素。由于html
是所有元素的祖先,如果页面在任何地方都包含文本,那么html
将包含,因此这将是第一个匹配的元素。
我不确定你是否可以用CSS实现这一点,但你可以像这样使用XPath:
page.at_xpath('//*[text()[contains(., "Required")]]')
这将查找具有text()
节点作为包含Required
的子节点的第一个元素节点。当您拥有该节点(如果它存在)时,您可以对其调用name
来给出元素的名称。
对于CSS,您可以执行以下操作:
page.at('[text()*="Required"]')
不过,它不是真正的CSS,甚至不是jQuery的额外版本。
您应该使用CSS选择器:
page.css('p').text