You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XPath获取元素前置兄弟节点并打印对应节点值

问题原因

你原有代码的问题在于使用了互斥的if-else逻辑,只要sibling_two非空就完全不会处理sibling_two以外的节点,因此只能输出单一类型的节点内容。


方案1:优化XPath,一次获取所有目标节点(推荐)

你可以直接通过position()语法一次性匹配前2个前置a兄弟节点,无需分两次查询,代码更简洁高效:

# preceding-sibling轴按离当前节点从近到远排序,position()<=2匹配前2个符合要求的a节点
siblings = driver.find_elements_by_xpath("//span[contains(@class, 'tag')]/preceding-sibling::a[position()<=2]")

# 直接遍历所有存在的节点即可,空列表不会产生输出
for item in siblings:
    print(item.text)

如果需要调整输出顺序(先输出更远的sibling_two,再输出更近的sibling_one),可以把列表倒序后遍历:

for item in reversed(siblings):
    print(item.text)

方案2:保留原有定位逻辑,修改遍历规则

如果不想改动现有的XPath定位代码,直接删除原有的if-else互斥判断,分别遍历两个列表即可,空列表遍历不会产生报错或多余输出:

# 输出所有存在的sibling_two
for i in sibling_two:
    print(i.text)
# 输出所有存在的sibling_one
for a in sibling_one:
    print(a.text)

两种方案都可以实现「所有存在的sibling_one、sibling_two都输出,sibling_two不存在时自动输出sibling_one」的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:06:00