You need to enable JavaScript to run this app. 使用Selenium如何获取指定li元素内最后一个子节点的文本Hello
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium如何获取指定li元素内最后一个子节点的文本Hello

提取方案

你要获取的Hello是<li class="line">元素的直接子文本节点,不属于内部<strong>标签的内容,直接调用li元素的text属性会同时拿到Person Hello,可以用以下两种方案实现:


方案1:通过Selenium执行JS脚本提取(推荐)

该方案直接筛选DOM文本节点,精准度最高,不受标签内文本重复的影响,跨编程语言通用:

  1. 先定位到目标li元素
# Python 示例
from selenium.webdriver.common.by import By
li_element = driver.find_element(By.CSS_SELECTOR, 'li.line')
  1. 执行JS脚本提取直接文本节点内容
hello_text = driver.execute_script('''
  return Array.from(arguments[0].childNodes)
    .filter(node => node.nodeType === Node.TEXT_NODE)
    .map(node => node.textContent.trim())
    .join('')
''', li_element)

Java版本写法逻辑一致:

// Java 示例
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.By;

WebElement liElement = driver.findElement(By.cssSelector("li.line"));
String helloText = (String) ((JavascriptExecutor) driver).executeScript(
  "return Array.from(arguments[0].childNodes).filter(n => n.nodeType == Node.TEXT_NODE).map(n => n.textContent.trim()).join('')", 
  liElement
);

如果需要保留文本前后的原始空格、换行符,删除代码中的trim()方法即可


方案2:文本替换法

如果不想执行JS,可以通过全量文本减去子标签内容实现:

# Python 示例
full_text = li_element.text.strip()
strong_text = driver.find_element(By.CSS_SELECTOR, 'li.line strong.testing').text.strip()
hello_text = full_text.replace(strong_text, '').strip()

注意:该方案仅适用于目标文本中不存在和<strong>标签内容重复的场景


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:06:00