我有当前的HTML代码:
<div class="group">
<ul class="smallList">
<li><strong>Date</strong>
13.06.2019
</li>
<li>...</li>
<li>...</li>
</ul>
</div>
这是我的“错误” XPath:
//div[@class='group']/ul/li[1]
,我想用XPath提取日期,而没有strong
标记中的文本,但是我不确定如何在XPath中使用NOT,或者甚至可以在这里使用它?
请记住日期是动态的。
答案 0 :(得分:1)
答案 1 :(得分:1)
获取日期的最简单方法是使用XPath-1.0表达式
//div[@class='group']/ul/li[1]/text()[normalize-space(.)][1]
结果确实包含空格。
如果您也想摆脱它们,请使用以下表达式:
normalize-space(//div[@class='group']/ul/li[1]/text()[normalize-space(.)][1])
不幸的是,这仅适用于XPath-1.0中的一个结果。
如果您可以使用XPath-2.0,则可以将normalize-space()
附加到表达式的末尾,这样还可以处理多个结果:
//div[@class='group']/ul/li[1]/text()[normalize-space(.)][1]/normalize-space()
答案 2 :(得分:0)
这里是python方法,如果您的数据与ul / li相关联,它将直接从父级读取数据。
Python:
def get_text_exclude_children(element):
return driver.execute_script(
"""
var parent = arguments[0];
var child = parent.firstChild;
var textValue = "";
while(child) {
if (child.nodeType === Node.TEXT_NODE)
textValue += child.textContent;
child = child.nextSibling;
}
return textValue;""",
element).strip()
这是在您的情况下的称呼方式。
ulEle = driver.find_element_by_xpath("//div[@class='group']/ul/li[1]")
datePart = get_text_exclude_children(ulEle)
print(datePart)
如果不是python,请随时转换为您使用的语言。