使用Tex检索两个子元素之间的文本

2024-04-26 07:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有任何方法可以轻松地检索夹在两个子元素和文本之间的文本?在本例中,我希望提取文本USD。在

<div class="indemandProgress-raised ng-binding">
    <span class="indemandProgress-raisedAmount ng-binding" gogo-test="raised">
        $6,811,034
    </span>
    USD
    <span class="ng-binding">
        total funds raised
    </span>
</div>

浏览器中代码的实际格式

^{pr2}$

单独使用XPATH是可能的还是必须提取所有文本然后解析它?在

它与硒有关。


Tags: 方法test文本div元素ngclassbinding
3条回答

像使用xpath 2.0+一样尝试:

//div[@class="indemandProgress-raised ng-binding"]/text()

Test Demo


在Selenium中,不能使用返回属性或文本节点的XPath,因为只支持节点。在

要获得所需的文本,可以使用Javascript从文本节点提取它。 或者选择节点,然后使用.text

^{pr2}$

因此,最终,在Selenium中使用XPath/text()是不可能的,您必须依赖于上面所述的替代方法。在

不能单独使用XPath来完成,但是可以使用Javascript Executor来获取文本节点。您没有指定语言,所以这里有一个用C实现的方法:

/// <summary>
/// Returns the text of the specified child text node.
/// </summary>
/// <param name="parentElement">The parent <see cref="IWebElement"/> of the desired text node.</param>
/// <param name="index">The index of the childNode collection relative to parentElement</param>
/// <returns>The text of the specified child text node.</returns>
public string GetChildTextNode(IWebElement parentElement, int index = 0)
{
    string s = (string)((IJavaScriptExecutor)driver).ExecuteScript("return arguments[0].childNodes[arguments[1]].textContent;", parentElement, index);
    return s.Trim();
}

在这种情况下,你会说

^{pr2}$

您已经接受了这个答案,但请注意,text.split()[1]是非常不可靠的解决方案,它可能不适用于其他(大多数情况下)。例如,如果第一个文本节点包含空格

$ 6,811,034

您可以尝试以下解决方案:

^{pr2}$

请注意,div有以下5个子节点:

  1. 空字符串(索引0
  2. span节点(索引1
  3. 文本节点"USD"(索引2
  4. 另一个span(索引3
  5. 另一个空字符串(index4

您需要获取第三个子节点的文本内容,childNodes[2].textContent允许您这样做

相关问题 更多 >