通过包含文本获取元素名称



我正在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

相关内容

  • 没有找到相关文章

最新更新