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

如何用Selenium Python定位特定图片并获取其src属性值

问题

我想获取一张图片的src属性值,但要么找不到对应的元素,要么筛选不出需要的图片。

我试过几种不同的XPath和CSS选择器,包括:

imgsrc = driver.find_element(By.CSS_SELECTOR, 'button[class="pv-top-card-profile-picture__image pv-top-card-profile-picture__image--show ember-view"]')

#imgsrc = driver.find_element(By.XPATH, "//img[@class='pv-top-card-profile-picture pv-top-card-profile-picture']")

上述代码无法找到元素。

imgsrc = driver.find_element(By.XPATH, "[//img[contains(@src, 'profile-displayphoto')]")

这个选择器范围太广,会定位到错误的图片。

对应的HTML结构如下:

<div class="pv-top-card__non-self-photo-wrapper ml0">
  
  <button class="pv-top-card-profile-picture pv-top-card-profile-picture__container display-block
      pv-top-card__photo presence-entity__image EntityPhoto-circle-9
      " type="button">
      
      
    <img width="200" title="" src="https://media.licdn.com/dms/image/C4E03AQEW8FzkdjFD-w/profile-displayphoto-shrink_400_400/0/1516275678440?e=1683158400&amp;v=beta&amp;t=vmGZHtwkrttxt85prjTTySrnybP7L6lX858TpFgtWaQ" height="200" alt="" id="ember818" class="pv-top-card-profile-picture__image pv-top-card-profile-picture__image--show ember-view">

<!---->
<!---->
    

  </button>

  
<div class="presence-entity__indicator presence-entity__indicator--size-9 presence-indicator
    hidden
    presence-indicator--size-9">
  <span class="visually-hidden">
      Status is offline
      </span>
</div>
</div>
解决方案

问题分析

  1. 第一个CSS选择器错误定位了button元素,且把img的类名套用到了button的选择器上,目标img实际是button的子元素。
  2. 第二个XPath里的img类名与实际HTML不匹配,实际img的类是pv-top-card-profile-picture__image pv-top-card-profile-picture__image--show ember-view,并非你写的内容。
  3. 第三个XPath存在语法错误(多了开头的[),且仅通过src字符串筛选范围过宽。

正确定位方式

以下几种选择器可精准定位目标图片:

方式1:结合父容器与img类名的CSS选择器

# 先定位父容器,再选择内部的目标img
imgsrc = driver.find_element(By.CSS_SELECTOR, 'div.pv-top-card__non-self-photo-wrapper img.pv-top-card-profile-picture__image--show')
# 获取src属性值
img_src = imgsrc.get_attribute('src')

方式2:结合父容器的XPath定位

# 通过父div找到内部button里的目标img
imgsrc = driver.find_element(By.XPATH, "//div[@class='pv-top-card__non-self-photo-wrapper ml0']//img[contains(@class, 'pv-top-card-profile-picture__image--show')]")
img_src = imgsrc.get_attribute('src')

方式3:父容器+src特征的组合筛选

如果担心类名变动,可结合父容器缩小范围后再用src特征筛选:

imgsrc = driver.find_element(By.XPATH, "//div[@class='pv-top-card__non-self-photo-wrapper ml0']//img[contains(@src, 'profile-displayphoto')]")
img_src = imgsrc.get_attribute('src')

额外提示

定位前需确保页面加载完成,推荐使用显式等待避免元素未加载的问题:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 最多等待10秒,直到目标元素出现
imgsrc = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, 'div.pv-top-card__non-self-photo-wrapper img.pv-top-card-profile-picture__image--show'))
)
img_src = imgsrc.get_attribute('src')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:25:06