Selenium 从节点获取文本
我有一段HTML,如下所示: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
<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/任何东西获得它。。。