我有以下HTML:
<li class="group-ib medium-gap line-120 vertical-offset-10">
<i class="fa fa-angle-right font-bold font-95 text-primary text-dark">
::before
</i>
<span>
abc:
<b class="text-primary text-dark">st1</b>
</span>
</li>
我想提取始终在str1
之后发生的abc
。我可以使用XPATH
链接:
xpath('.//b[@class = "text-primary text-dark"]')[0].text
但是解决方案取决于它是这个特定类的第一次出现,它不止一次出现并且总是以相同的顺序出现。我想知道是否有办法搜索HTML
abc
并提取后续文字?
答案 0 :(得分:1)
也许找到包含abc
的元素,如果需要导航到子/父,获取文本
选择器示例:
查找包含abc
文本的任何(*代表任何标记)元素并选择任何子项。
//*[contains(text(), 'abc')]/*
查找包含abc
文字的任何(*代表任何标记)元素并选择他的b
子项。
//*[contains(text(), 'abc')]/b
查找包含文字li
的元素的abc
元素,并从里面选择b
元素(在li内),使用//
自{{ 1}}不是b
的第一个孩子
li
如果你知道//li[.//[contains(text(), 'abc')]]//b
然后从那里开始,看看返回了什么元素,如果需要导航到父/祖先/孩子。
有关xpath的更多信息,请参阅w3schools xpath selectors
答案 1 :(得分:0)
以下xpath应该提供您要搜索的文本
//*[contains(text(),'abc')]/*[@class='text-primary text-dark'][1]/text()
假设您要查找的str1
应始终位于属性为class=text-primary text-dark
还假设您想要获得第一次这样的事件(忽略其他text-primary text-dark
) - 这就是为什么[1]
此xpath确保您搜索这些类的节点在搜索之前具有文本abc
。