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

基于Python Selenium从OfferUp搜索结果提取图片的技术求助

问题分析与修复方案

你当前的代码存在几个关键问题导致无法正确提取OfferUp的商品图片:

  • 定位范围太广:直接通过img标签获取会拿到页面上所有图片(包括网站logo、导航图标等非目标商品图)
  • 语法错误:find_elements((By.TAG_NAME, 'img'))多了一层括号,正确写法是find_elements(By.TAG_NAME, 'img')
  • 懒加载未处理:OfferUp的商品图片是滚动加载的,静态等待无法触发所有图片加载
  • 等待方式不严谨:time.sleep不如WebDriverWait可靠,容易因网络波动导致元素未加载完成

以下是修复后的代码,能精准提取搜索结果中的商品图片,并处理懒加载:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 初始化浏览器
chrome_driver_path = 'C:\\Users\gues\\OneDrive\\Desktop\\PyFiles\\chromedriver.exe'
driver = webdriver.Chrome(executable_path=chrome_driver_path)
driver.maximize_window()

# 打开目标页面
wait = WebDriverWait(driver, 20)
driver.get('https://offerup.com/search?q=dresser&DISTANCE=20&DELIVERY_FLAGS=p&PRICE_MAX=100')

# 处理懒加载:滚动页面直到所有商品加载完成
def scroll_to_load_all_items():
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        # 滚动到底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(3)
        # 检查页面高度是否变化
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height

scroll_to_load_all_items()

# 精准定位商品图片(OfferUp商品图片的父容器有特定类名,可通过此缩小范围)
wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div[data-testid="listing-image"] img')))
product_images = driver.find_elements(By.CSS_SELECTOR, 'div[data-testid="listing-image"] img')

# 提取图片URL,优先取data-src(懒加载图片的真实地址),再取src
image_urls = []
for img in product_images:
    img_url = img.get_attribute('data-src') or img.get_attribute('src')
    if img_url and 'http' in img_url:  # 过滤无效地址
        image_urls.append(img_url)

# 打印结果
for idx, url in enumerate(image_urls, 1):
    print(f"商品图片 {idx}: {url}")

# 关闭浏览器(可选)
# driver.quit()

关键修复点说明:

  • 精准定位:通过div[data-testid="listing-image"] img直接定位商品图片容器内的图片,避免无关图片混入
  • 懒加载处理:通过循环滚动页面并检查高度变化,确保所有商品图片都被触发加载
  • 属性优先顺序:OfferUp的懒加载图片会把真实地址存在data-src,占位图存在src,所以优先提取data-src
  • 可靠等待:用WebDriverWait确保商品图片元素加载完成后再提取,避免因页面未加载完全导致的空结果

提取到的image_urls列表即可用于在其他网站或弹窗中展示,配合定时任务就能实现商品价格与图片的实时更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:13:24