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

Python Selenium遍历URL数组提取商品销量报NoSuchElementException如何解决

问题原因
  1. 动态页面加载时序问题:Shopee的商品销量属于异步渲染内容,driver.get()仅保证页面基础框架加载完成就会继续执行后续代码,第一个商品页加载速度快刚好渲染完销量元素,后续页面还没完成渲染就执行查找操作,因此抛出NoSuchElementException
  2. API弃用警告:你使用的find_element_by_css_selector是Selenium 4.0+版本已废弃的旧方法,需要替换为官方推荐的统一find_element写法消除警告。
修复方案

首先导入Selenium的等待与元素定位依赖包:

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

替换原有遍历代码:

urls=["https://shopee.com.my/Pantene-Shampoo-750ml-i.52968176.7669592698/","https://shopee.com.my/PureMAE-Ylang-Ylang-and-Grapefruit-Shampoo-250ML-i.238433989.4820842024/","https://shopee.com.my/Some-By-Mi-Cica-Peptide-Anti-Hair-Loss-Shampoo-285ml-Tonic-150ml-Treatment-50ml-i.18874494.3274522052/","https://shopee.com.my/-JULYME-Anti-Hair-Loss-Perfume-Hair-Shampoo-500ml-i.219158269.6815232839/"]

# 初始化最长等待时间为10秒
wait = WebDriverWait(driver, 10)

for url in urls:
    driver.get(url)
    # 可选:滚动页面触发元素渲染,部分站点元素需要进入视口才会加载
    driver.execute_script("window.scrollTo(0, 400)")
    # 等待销量元素加载完成再提取文本
    sales_ele = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.aca9MM')))
    print(sales_ele.text)
可选优化

如果后续出现类名变更导致定位失效的情况,可以替换为更稳定的文本关联定位,比如定位包含「Sold」关键字的元素:

sales_ele = wait.until(EC.presence_of_element_located((By.XPATH, '//*[contains(text(),"Sold")]/span')))
# 实际使用时可以根据页面结构调整XPATH路径

内容的提问来源于stack exchange,提问作者CHEAH YI JO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:04