使用Selenium如何获取指定li元素内最后一个子节点的文本Hello
提取方案
你要获取的Hello是<li class="line">元素的直接子文本节点,不属于内部<strong>标签的内容,直接调用li元素的text属性会同时拿到Person Hello,可以用以下两种方案实现:
方案1:通过Selenium执行JS脚本提取(推荐)
该方案直接筛选DOM文本节点,精准度最高,不受标签内文本重复的影响,跨编程语言通用:
- 先定位到目标li元素
# Python 示例 from selenium.webdriver.common.by import By li_element = driver.find_element(By.CSS_SELECTOR, 'li.line')
- 执行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
相关产品推荐
相关产品推荐

