如何检测div内是否存在指定元素 解决Selenium XPath全页匹配问题
问题原因
你调用子元素查询的XPath使用了//开头,这在XPath语法中属于绝对路径查询:无论你在哪个父元素下执行find_elements_by_xpath方法,只要路径以//开头,都会默认从整个HTML文档的根节点开始搜索匹配元素,所以你查到的永远是全页所有符合条件的2个反应计数标签,和你选中的索引为1的div没有关联。
修复方案
如果要限定只在当前选中的div内部搜索,需要在XPath开头加.表示当前节点,改为相对路径查询即可:
# 正确写法,.// 代表从当前选中的div节点下开始查找 print(len(driver.find_elements_by_xpath("//div[@class='occludable-update ember-view']")[1].find_elements_by_xpath(".//span[@class='v-align-middle social-details-social-counts__reactions-count']")))
修改后索引为1的div查询结果会返回0,符合预期。
批量提取所有帖子反应数示例
posts = driver.find_elements_by_xpath("//div[@class='occludable-update ember-view']") reaction_counts = [] for post in posts: reaction_elements = post.find_elements_by_xpath(".//span[@class='v-align-middle social-details-social-counts__reactions-count']") count = int(reaction_elements[0].text.strip()) if reaction_elements else 0 reaction_counts.append(count) print(reaction_counts) # 输出结果为 [3, 0, 0, 3]
内容的提问来源于stack exchange,提问作者Paul Viorel
相关产品推荐
相关产品推荐

