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

Python Selenium图片链接爬取异常求助:仅获取5条而非13条

解决Selenium爬取图片srcset属性仅部分获取的问题

可能的原因及对应修复方案

1. 懒加载导致未触发图片加载

多数网站会用懒加载优化性能——只有当图片滚动到浏览器视口范围内时,才会填充srcset属性。直接批量获取元素属性会出现空值。

修复代码:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait

# 注意:用find_elements(复数)获取所有匹配元素,单数仅返回第一个
self.imgs = driver.find_elements(By.XPATH, self.link_photo)

for img in self.imgs:
    # 将元素滚动到视口,触发懒加载
    ActionChains(driver).move_to_element(img).perform()
    # 等待srcset属性加载完成,超时时间可按需调整
    WebDriverWait(driver, 3).until(
        lambda d: img.get_attribute('srcset') not in (None, '')
    )
    # 获取有效链接
    srcset = img.get_attribute('srcset')
    if srcset:
        print(srcset)

2. 部分图片使用替代属性存储链接

有些网站会把图片链接暂存在data-srcset、data-src这类自定义属性中,加载后才赋值给srcset。可同时检查这些属性:

修复代码:

for img in self.imgs:
    ActionChains(driver).move_to_element(img).perform()
    # 按优先级尝试获取不同属性的链接
    src_link = img.get_attribute('srcset') or img.get_attribute('data-srcset') or img.get_attribute('src')
    if src_link:
        print(src_link)

3. 定位元素并非直接的img标签

如果你的self.link_photo XPath定位的是图片容器(如div、figure)而非<img>标签本身,获取srcset必然为空。需修正XPath到img元素:

  • 原XPath示例://div[@class='photo-box']
  • 修改后://div[@class='photo-box']/img 或 //img[ancestor::div[@class='photo-box']]

4. 等待页面完全加载

确保页面所有资源加载完成后再操作元素:

WebDriverWait(driver, 10).until(
    lambda d: d.execute_script('return document.readyState') == 'complete'
)

额外排查手段

打印元素标签和HTML,确认定位的是否为有效img元素:

for idx, img in enumerate(self.imgs):
    print(f"元素{idx+1}标签: {img.tag_name}")
    print(f"元素{idx+1}HTML: {img.get_attribute('outerHTML')}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:20:23