Selenium 从节点获取文本

Selenium 从节点获取文本,selenium,webdriver,Selenium,Webdriver,我有一段HTML,如下所示: <a href="/something"> Title <span>Author</span> </a> 我得到了一个与这个HTML匹配的WebElement。如何从中提取“标题”?方法.getText()返回“Title\nAuthor”…您不能在WebDriver API中执行此操作,必须在代码中执行。例如: var textOfA = theAElement.getText(); var

我有一段HTML,如下所示:

<a href="/something">
     Title
    <span>Author</span>
</a>


我得到了一个与这个HTML匹配的WebElement。如何从中提取“标题”?方法.getText()返回“Title\nAuthor”…

您不能在WebDriver API中执行此操作,必须在代码中执行。例如:

var textOfA = theAElement.getText();
var textOfSpan = theSpanElement.getText();
var text = textOfA.substr(0, textOfA.length - textOfSpan.length).trim('\n');

请注意,尾随的换行符实际上是
元素文本的一部分,因此如果不需要它,则需要将其剥离。

验证“//a[normalize space(text())=Title]”的元素。如果“a”标记中的文本为“Title”,则返回true。

以下是用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()
如何在本系统中使用:

liElement = driver.find_element_by_xpath("//a[@href='your_href_goes_here']")
liOnlyText = get_text_exclude_children(liElement)
print(liOnlyText)
请使用您可能的策略获取元素,此方法需要一个元素,您需要该元素中的文本(无子文本)。

如果使用Python:

[x['textContent'].strip() for x in element.get_property('childNodes') if isinstance(x, dict)]
其中
元素
是您的元素


这将返回
['Title','']
(因为
span
后面有空格)。

我最终还是这样做的。希望我能通过API/XPath/任何东西获得它。。。