You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium Python获取li元素文本并排除内部span元素文本?

仅获取li元素直接包含的文本内容的解决方法

你的问题出在Selenium的element.text会返回元素及其所有子元素的合并文本,所以包含了<span>里的数字。以下几种方法可以只获取li自身的直接文本:

方法1:使用XPath直接定位文本节点

通过XPath的text()选择器定位li的直接文本节点,再去除多余空格:

def test2(self):
    # 定位第二个li的直接文本节点,获取内容并去除首尾空格
    direct_text = self.browser.find_element(By.XPATH, '//div[@id="test-2-div"]//ul[@class="list-group"]//li[2]/text()').get_attribute('nodeValue').strip()
    self.assertEqual(direct_text, "List Item 2")

方法2:通过JavaScript获取文本节点内容

利用JS直接访问元素的子文本节点,过滤掉子元素的内容:

def test2(self):
    second_li = self.browser.find_element(By.XPATH, '//div[@id="test-2-div"]//ul[@class="list-group"]//li[2]')
    # 执行JS获取第一个文本节点的内容并去除空格
    direct_text = self.browser.execute_script('return arguments[0].childNodes[0].textContent.trim();', second_li)
    self.assertEqual(direct_text, "List Item 2")

方法3:文本内容过滤

如果前面两种方法不适用,可以先获取完整文本,再移除span里的内容:

def test2(self):
    second_li = self.browser.find_element(By.XPATH, '//div[@id="test-2-div"]//ul[@class="list-group"]//li[2]')
    full_text = second_li.text
    span_text = second_li.find_element(By.TAG_NAME, 'span').text
    # 移除span文本及前面的空格
    direct_text = full_text.replace(f' {span_text}', '').strip()
    self.assertEqual(direct_text, "List Item 2")

内容的提问来源于stack exchange,提问作者DMa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:22:51