当前位置: 首页 > 知识库问答 >
问题:

如何在Selenium WebElement中获取元素的所有子节点,包括文本节点?

杨星纬
2023-03-14

我必须在JavaSelenium应用程序中解析此元素:

<span class="text-small-teaser d-none d-sm-inline-block cut-job-address swissdev-grey-text">
    <span class="icon-building mr-1" aria-hidden="true"></span>
    <span class="mr-3">Altex Romania </span>
    <span class="icon-map-marker mr-1" aria-hidden="true"></span> 
    Global City Business Park, Bucharest  
    <span class="green-text"> + Remote</span>        
</span>

我想得到一个包含所有5个孩子的列表,包括文本。当我使用WebElement中的任何选择器(xpath、cssSelector)时,它只返回4个非文本元素。有人知道怎么做吗?我是硒的新手,以前从未使用过。谢谢

共有1个答案

吕文林
2023-03-14

布加勒斯特环球城商业园与其他4个span节点不同,它不是父span节点的子节点
此文本值是父节点本身的文本
因此,例如,如果您想提取第二个子元素Altex Romania的文本,您将能够使用如下XPath定位第二个子元素

"//span[contains(@class,'cut-job-address')]//span[@class='mr-3']"

然后从那个WebElement对象中提取文本。
但是要提取布加勒斯特全球城市商业公园,你必须从父元素本身提取文本,类似于这样:

WebElement element = driver.findElement(By.xpath("//span[contains(@class,'cut-job-address')]"));
JavascriptExecutor jse = (JavascriptExecutor)driver;
String parentStringOnly = jse.executeScript("""
    return jQuery(arguments[0]).contents().filter(function() {
        return this.nodeType == Node.TEXT_NODE;
    }).text();
    """, element);
 类似资料:
  • 问题内容: 我希望获得“我是文本节点”,不希望删除“ edit”标签,并且需要跨浏览器解决方案。 问题答案: 这将获取所选元素的,然后对其应用过滤功能。过滤器功能仅返回文本节点(即带有的节点)。

  • 使用Python 3。 假设: 如果我这样做: elem.text包含"文本其他" 如果我这样做:

  • 问题内容: This is some text 获得“这是一些”并非易事。例如,返回“ This is some text”: 通常,如何获得特定元素的文本而不包含其子元素的文本? (我在下面提供了一个答案,但是如果有人想出一个不太丑陋的解决方案,它将让问题悬而未决)。 问题答案: 这是一个常规解决方案: 传递给函数的元素可以是从方法中获得的东西(即它可以是一个对象)。 或者,如果您没有jQuer

  • 你们这些家伙,我有这样一个HTML: 这是将上述所有选项放入列表的代码: 实际上它不起作用。我不知道我错在哪里。请帮帮我。非常感谢。

  • 本文向大家介绍如何在JavaScript中删除DOM节点的所有子元素?,包括了如何在JavaScript中删除DOM节点的所有子元素?的使用技巧和注意事项,需要的朋友参考一下 删除<div>的子元素 我们可以用, 它将删除的所有子项 其ID为“ mList”。 示例 在您的代码中,它可以写为-

  • 问题内容: 我正在创建Jenkins管道作业,并且需要在所有带有特定标签的节点上运行作业。 因此,我试图获取分配有特定标签的节点名称的列表。(有了一个节点,我可以使用来获得标签) 中的-list 似乎不包含我需要包含在搜索中的主节点。 我当前的解决方案是遍历- 并使用-method获取节点。这行得通,但是在Jenkins的javadoc中,我正在阅读此列表,可能不是最新的。 从长远来看,我将(动态