考虑:
<div id="a">This is some
<div id="b">text</div>
</div>
获得“这是一些”是非常重要的。例如,这将返回“这是一些文本”:
driver.find_element_by_id('a').text
一般而言,如何在不包含其子元素文本的情况下获取特定元素的文本?
原文由 josh 发布,翻译遵循 CC BY-SA 4.0 许可协议
考虑:
<div id="a">This is some
<div id="b">text</div>
</div>
获得“这是一些”是非常重要的。例如,这将返回“这是一些文本”:
driver.find_element_by_id('a').text
一般而言,如何在不包含其子元素文本的情况下获取特定元素的文本?
原文由 josh 发布,翻译遵循 CC BY-SA 4.0 许可协议
在您分享的 HTML 中:
<div id="a">This is some
<div id="b">text</div>
</div>
文本 This is some
位于 文本节点 内。以结构化方式描述 文本节点:
<div id="a">
This is some
<div id="b">text</div>
</div>
要 使用 Selenium 的 python 客户端从 文本节点 中提取和打印文本 This is some
,您有两种方法,如下所示:
Using splitlines()
: You can identify the parent element ie <div id="a">
, extract the innerHTML
and then use splitlines()
as follows:
使用 xpath :
print(driver.find_element_by_xpath("//div[@id='a']").get_attribute("innerHTML").splitlines()[0])
print(driver.find_element_by_css_selector("div#a").get_attribute("innerHTML").splitlines()[0])
使用 execute_script()
:您还可以使用 execute_script()
方法,它可以在当前窗口/框架中同步执行 JavaScript,如下所示:
使用 xpath 和 firstChild :
parent_element = driver.find_element_by_xpath("//div[@id='a']")
print(driver.execute_script('return arguments[0].firstChild.textContent;', parent_element).strip())
parent_element = driver.find_element_by_xpath("//div[@id='a']")
print(driver.execute_script('return arguments[0].childNodes[1].textContent;', parent_element).strip())
原文由 undetected Selenium 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
2 回答902 阅读✓ 已解决
这是一个通用的解决方案:
传递给函数的元素可以是从
find_element...()
方法获得的东西(即,它可以是WebElement
对象)。或者,如果您没有 jQuery 或不想使用它,您可以将上面的函数体替换为:
我实际上是在测试套件中使用这段代码。