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

使用Selenium 4.8.2+Python爬取电商网站无输出无报错求解决

问题分析与解决方案

你的代码没有输出的核心原因有三个:动态生成的CSS类名导致元素定位失败、使用find_elements()而非find_element()、固定等待不可靠。以下是具体修正方案:

问题点拆解

  • 动态class名失效:代码中使用的sc-bcXHqe ergypN这类class是前端构建工具动态生成的,页面更新或环境变化时会改变,导致divs始终是空列表,循环根本没执行。
  • find_elements()使用错误:该方法返回元素列表,直接调用.text会抛出AttributeError,但被try-except捕获后赋值为空字符串,你看不到错误信息。每个产品卡片里的标题、价格、评分都是唯一的,应该用find_element()(单数)。
  • 固定等待不稳定:time.sleep(15)不能保证元素完全加载,可能页面还没渲染完就开始查找元素,导致定位失败。

修正后的代码

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 json

# 初始化浏览器
driver = webdriver.Chrome()
driver.minimize_window()

url = "https://www.meesho.com/crepe-kurtis/p/156p4t"
driver.get(url)

# 显式等待产品卡片加载完成,最多等待20秒
wait = WebDriverWait(driver, 20)
# 改用更稳定的定位:通过组件基础类名前缀匹配
divs = wait.until(EC.presence_of_all_elements_located(
    (By.XPATH, "//div[contains(@class, 'NewProductCardstyled__CardStyled')]")
))

print(f"找到{len(divs)}个产品卡片")  # 调试用,确认是否找到元素

product_info = []
for div in divs:
    # 提取标题
    try:
        title = div.find_element(By.XPATH, ".//p[contains(@class, 'StyledDesktopProductTitle')]").text
    except:
        title = ''
    
    # 提取价格
    try:
        price = div.find_element(By.XPATH, ".//h5[contains(@class, 'iIAyXW')]").text
    except:
        price = ''
    
    # 提取评分
    try:
        rating = div.find_element(By.XPATH, ".//span[contains(@class, 'eXFtxl')]").text
    except:
        rating = ''
    
    product_info.append({
        'title': title,
        'price': price,
        'rating': rating
    })

# 写入JSON文件,避免中文乱码
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(product_info, f, ensure_ascii=False, indent=4)

print("数据已成功写入data.json")
driver.quit()

关键优化说明

  • 稳定定位:用contains(@class, '固定前缀')替代完整的动态class名,组件基础类名不会轻易改变,避免定位失效。
  • 显式等待:WebDriverWait会等待元素出现后再执行后续代码,比固定sleep更可靠,节省不必要的等待时间。
  • 调试输出:增加元素数量打印,快速确认是否成功定位到目标元素,方便排查问题。
  • 编码处理:写入JSON时指定UTF-8编码和关闭ASCII转义,避免中文内容乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:07:43