如何用XPath获取<p class='p1'>下除首个<span>外的全部文本?
解决方案
你可以通过以下几种方式实现需求,既保留所有子元素(包括<a>标签)的文本,又移除开头的<span>SIGNIFICADO: </span>内容:
方法一:字符串截取替换(最简单)
先获取整个<p class="p1">的完整文本(element.text会自动拼接所有子元素的文本),再移除开头的目标字符串:
p1_element = driver.find_element(By.XPATH, '//p[@class="p1"]') full_text = p1_element.text # 只替换开头的一次"SIGNIFICADO: ",避免影响文本中间的相同内容 target_text = full_text.replace("SIGNIFICADO: ", "", 1)
方法二:XPath精准筛选文本节点
用XPath选中所有不属于第一个<span>的文本节点,再拼接成完整文本:
# 选中p标签下所有非第一个span后代的文本节点 text_nodes = driver.find_elements(By.XPATH, '//p[@class="p1"]//text()[not(ancestor::span[1])]') # 过滤空文本并拼接 target_text = ''.join([txt.strip() for txt in text_nodes if txt.strip()])
方法三:DOM操作移除目标span
通过JavaScript直接在页面DOM中移除第一个<span>元素,再获取剩余文本:
p1_element = driver.find_element(By.XPATH, '//p[@class="p1"]') # 执行JS移除第一个子元素(即目标span) driver.execute_script("arguments[0].removeChild(arguments[0].firstElementChild);", p1_element) target_text = p1_element.text
内容的提问来源于stack exchange,提问作者Prinple Vrlo
相关产品推荐
相关产品推荐

