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

如何在Selenium循环中通过XPath正确定位目标div与图片元素?

问题分析与解决

页面HTML结构

<div class="search-results-container">
<div>
 <div class="feed-shared-update-v2">
   <div class="update-components-actor">
    <div class="update-components-actor__image">
     <img class="presence-entity__image" src="https://www.testimage.com/test.jpg"/>
     <span></span>
    <span>test</span>
    </div>
   </div>
  </div>
</div>
<div>
 <div class="feed-shared-update-v2">
   <div class="update-components-actor">
    <div class="update-components-actor__image">
     <img class="presence-entity__image" src="https://www.testimage.com/test.jpg"/>
     <span></span>
    <span>test</span>
    </div>
   </div>
  </div>
</div>

</div>

当前代码尝试

获取元素列表:

elements = driver.find_elements(By.XPATH, "//*[contains(@class, 'feed-shared-update-v2')]//preceding::div[1]");

循环中定位元素的错误代码:

for card in elements:
  profilePic = card.find_element(By.XPATH, ".//following::div[@class='update-components-actor']//following::img[1]").get_attribute('src')
  text = card.find_element(By.XPATH, ".//following::div[@class='update-components-text']//following::span[2]").text

错误信息

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//following::div[@class='update-components-actor']//following::img[1]"}

问题原因与修正方案

核心问题

  1. 定位起点错误:你获取的是feed-shared-update-v2的前一个div,但这个div只是feed-shared-update-v2的空父容器,本身没有关联目标元素的节点,从这里出发自然找不到后续内容。
  2. XPath语法冗余且逻辑错误:following::轴与//混用会无差别扩大查找范围,链式使用容易定位偏离;另外你写的update-components-text在HTML结构中不存在,属于无效节点。

修正后的代码

第一步:获取正确的目标容器

直接定位所有feed-shared-update-v2元素,这才是包含头像和文本的有效父容器:

elements = driver.find_elements(By.XPATH, "//div[contains(@class, 'feed-shared-update-v2')]")

第二步:循环内精准定位元素

for card in elements:
    # 获取头像src
    profilePic = card.find_element(By.XPATH, ".//div[@class='update-components-actor']//img[@class='presence-entity__image']").get_attribute('src')
    # 获取第二个span的文本
    text = card.find_element(By.XPATH, ".//div[@class='update-components-actor__image']/span[2]").text

代码说明

  • 头像定位:从当前feed-shared-update-v2元素出发,逐层匹配子节点,通过类名精准锁定目标img,避免误匹配其他元素。
  • 文本定位:直接选取update-components-actor__image下的第二个span节点(用/span[2]指定同级第二个span),因为目标span无类名,索引定位是最直接的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:10:35