从XPath获取部分值

时间:2019-06-13 12:14:43

标签: xpath

我有当前的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,或者甚至可以在这里使用它?

请记住日期是动态的。

3 个答案:

答案 0 :(得分:1)

使用substring-after()获取日期值。

substring-after(//div[@class='group']/ul/li[1],'Date')

输出:

enter image description here

答案 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,请随时转换为您使用的语言。