Selenium Python抓取商品图片仅返回第一条链接的问题求助
问题原因
你只能拿到第一张图片链接的核心原因是该Shopify站点的产品详情页采用了懒加载策略:未进入可视区域、未被触发展示的图片不会提前渲染对应DOM元素,也不会填充data-original-src属性,因此初始状态下你只能定位到当前展示的第一张图片元素。
解决方案
方案1:模拟交互触发所有图片加载后提取
通过点击所有缩略图触发大图加载,再逐一提取链接,适配懒加载逻辑:
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 # 等待所有缩略图元素加载完成 thumbnails = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.Product__Thumbnail')) ) image_links = [] for thumb in thumbnails: # 点击缩略图触发对应大图渲染 thumb.click() time.sleep(0.3) # 提取当前大图的链接属性 current_img = driver.find_element(By.CSS_SELECTOR, '#shopify-section-product-template .Image--lazyLoaded') img_src = current_img.get_attribute('data-original-src') if img_src and img_src not in image_links: # 补全链接协议(Shopify默认返回//开头的无协议链接) full_src = f"https:{img_src}" if img_src.startswith('//') else img_src image_links.append(full_src)
方案2:直接提取页面预加载的产品JSON数据(更稳定)
Shopify所有产品页都会在前端嵌入全局产品数据,无需处理DOM渲染和懒加载,直接通过JS提取即可拿到全量图片链接:
# 执行JS读取全局对象中存储的完整产品信息 product_info = driver.execute_script("return window.Shopify.product;") # 直接提取所有图片的完整链接 image_links = [img["src"] for img in product_info["images"]]
内容的提问来源于stack exchange,提问作者ByHala
相关产品推荐
相关产品推荐

