如何使用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
相关产品推荐
相关产品推荐

