You need to enable JavaScript to run this app. Selenium如何提取特殊<i>标签内的完整文本内容
优惠活动
大模型
产品
解决方案
定价
更多

Selenium如何提取特殊<i>标签内的完整文本内容

问题原因

你无法拿到完整文本的核心原因通常有两个,加上你现有代码的逻辑漏洞共同导致了取值不全:

  1. Selenium的.text属性仅返回页面可见文本,若后半段数值被CSS设置为隐藏、或是通过::before/::after伪元素生成,就无法通过该属性获取
  2. 你的第二段代码仅提取了元素最后一个子节点的文本内容,若完整文本拆分在多个文本节点中,就会丢失后半段
  3. 你两次使用的元素定位器不一致(XPath取第4个<i>标签,CSS选择器取第8个子节点),首先要确认定位的是同一个目标元素,否则取值必然错误

修复方案

方案1:直接提取元素全部文本内容(含隐藏文本)

如果数值是普通文本节点只是被隐藏,直接取整个元素的textContent即可:

# 先确认定位器和你实际页面结构匹配,这里用和你XPath一致的第4个i标签做示例
target_i = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#readCollapse8 > div > form > div > i:nth-child(4)"))
)
full_text = driver.execute_script("return arguments[0].textContent.trim()", target_i)
print(full_text)

方案2:兼容伪元素生成的数值

如果后半段数值是CSS伪元素生成的(常见于爬虫逆向场景的页面渲染),用以下代码提取:

target_i = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#readCollapse8 > div > form > div > i:nth-child(4)"))
)
full_text = driver.execute_script("""
const el = arguments[0];
// 如果数值是::before伪元素生成,把下面的::after改成::before即可
const afterText = window.getComputedStyle(el, '::after').content.replace(/"/g, '');
return (el.textContent.trim() + ' ' + afterText).trim();
""", target_i)
print(full_text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 20:54:01