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

Selenium脚本无法通过类名定位元素获取图片URL问题排查

问题:无法获取HM商品页全屏图片URL

我想获取页面https://www2.hm.com/en_us/productpage.1109917007.html上的全屏图片URL。点击商品页的缩略图(类名为product-detail-thumbnail-image)会打开全屏图,我需要提取这个全屏图的URL。

我写了Selenium代码,逻辑是打开商品页、定位缩略图并点击、获取全屏图URL,但代码没有任何输出,也没打印“Found image!”,请问问题出在哪?

我尝试的操作

  • 打开目标商品页
  • 通过类名获取缩略图元素,点击缩略图
  • 尝试获取打开的全屏图URL

预期结果

代码能成功获取全屏图URL,并打印“Found image!”

我的代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
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


def web_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("--verbose")
    options.add_argument('--no-sandbox')
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument("--window-size=1920, 1200")
    options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome(options=options)
    return driver

driver = web_driver()
driver.get('https://www2.hm.com/en_us/productpage.1109917007.html')
delay = 5
image_urls = set()
thumbnails = driver.find_elements(By.CLASS_NAME, "product-detail-thumbnail-image")
print(thumbnails)
for img in thumbnails:
  try:
    img.click()
    time.sleep(delay)
  except:
    continue
  images = driver.find_elements(By.CLASS_NAME, "current fullscreen-image-modal-image")
  for image in images:
    if image.get_attribute('src') and 'http' in image.get_attribute('src'):
      image_urls.add(image.get_attribute('src'))
      print('Found image!')
      continue

问题分析与解决

1. 全屏图定位方式错误

By.CLASS_NAME仅支持单个类名,你写的"current fullscreen-image-modal-image"是两个类,无法通过By.CLASS_NAME定位。需要改用By.CSS_SELECTOR,写法为.current.fullscreen-image-modal-image(多个类名用点连接,无空格)。

2. 元素等待逻辑不可靠

time.sleep是固定等待,无法适配页面加载速度波动。改用WebDriverWait等待元素出现/可点击,能大幅提升代码稳定性。

3. 未处理页面弹窗

HM页面通常会有Cookie授权弹窗,不处理会遮挡元素,导致点击缩略图操作失效。

修正后的代码

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


def web_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("--verbose")
    options.add_argument('--no-sandbox')
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    options.add_argument("--window-size=1920, 1200")
    options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome(options=options)
    return driver

driver = web_driver()
driver.get('https://www2.hm.com/en_us/productpage.1109917007.html')
wait = WebDriverWait(driver, 10)
image_urls = set()

# 处理Cookie授权弹窗(如果存在)
try:
    accept_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[data-testid='accept-all-button']")))
    accept_btn.click()
except:
    pass

# 等待缩略图加载完成
thumbnails = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "product-detail-thumbnail-image")))
print(f"找到{len(thumbnails)}个缩略图")

for img in thumbnails:
    try:
        # 确保缩略图可点击后再点击
        wait.until(EC.element_to_be_clickable(img)).click()
        # 等待全屏图加载完成并定位
        fullscreen_img = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".current.fullscreen-image-modal-image")))
        img_src = fullscreen_img.get_attribute('src')
        if img_src and 'http' in img_src:
            image_urls.add(img_src)
            print('Found image!')
            print(f"图片URL: {img_src}")
    except Exception as e:
        print(f"处理缩略图时出错: {e}")
        continue

print(f"最终获取的图片URL集合: {image_urls}")
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:11:30