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

使用Python+Selenium爬取亚马逊ASIN触发NoSuchElementException如何解决

代码调整方案

  • 首先处理元素加载时序问题,默认的find_element会在页面触发load事件后立即执行,此时亚马逊异步渲染的商品列表可能还没挂载到DOM上,换成显式等待逻辑:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化10秒超时的等待对象
wait = WebDriverWait(driver, 10)
firstResult = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div[data-index="1"]>div')))
asin = firstResult.get_attribute('data-asin')
  • 优化元素选择器,亚马逊搜索页的data-index序号不固定,会因为广告位、筛选条件变化出现偏移,直接定位带非空data-asin属性的元素更稳定:
# 直接匹配第一个有有效ASIN值的商品元素
asin_element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div[data-asin]:not([data-asin=""])')))
asin = asin_element.get_attribute('data-asin')
  • 排查无头浏览器的反爬拦截,亚马逊会识别默认配置的无头Chrome,返回和普通浏览器不同的页面结构,启动浏览器时添加UA伪装和窗口配置:
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
# 替换为和你当前Chrome版本匹配的普通浏览器UA
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36')
chrome_options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(options=chrome_options)
  • 仍有问题的话可以执行print(driver.page_source)打印当前返回的页面源码,确认和你手动访问时的结构是否一致,排查反爬拦截导致的结构差异问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:02