如何使用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
相关产品推荐
相关产品推荐

