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

使用Selenium获取亚马逊商品价格:a-offscreen返回None求助

问题分析与解决

为什么首次定位返回空值?

  • a-offscreen类元素是亚马逊的隐藏元素(通常带有display: none样式),Selenium的.text属性仅返回页面可见元素的文本,对隐藏元素会返回空字符串(你看到的None是处理时的表现)。而BeautifulSoup直接解析HTML源码,不判断元素可见性,所以能提取到内容。
  • 不同商品的价格DOM结构存在差异,第一个商品的可见价格元素并不是a-offscreen,而是其他关联元素。

正确获取价格的两种方案

方案1:直接提取隐藏元素的内容

针对a-offscreen这类隐藏元素,跳过.text,直接获取元素的属性值:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

url = "https://www.amazon.in/Celevida-Kesar-Elaichi-Flavor-Metal/dp/B081WJ6536/ref=sr_1_5?crid=3NRZERQ8H4T8L&keywords=dr+reddys+celevida&qid=1672124472&sprefix=%2Caps%2C5801&sr=8-5"

services = Service(r"C:\Users\Deepak Shetter\chromedriver_win32\chromedriver.exe")
driver = webdriver.Chrome(service=services)
driver.get(url)

price = driver.find_element(By.CLASS_NAME, "a-offscreen")
# 获取元素的文本内容属性
price_text = price.get_attribute("textContent").strip()
print("price is", price_text)
driver.quit()

方案2:定位可见的价格元素(更可靠)

直接定位页面上显示的价格元素,同时加入显式等待避免页面加载延迟问题:

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

url = "https://www.amazon.in/Celevida-Kesar-Elaichi-Flavor-Metal/dp/B081WJ6536/ref=sr_1_5?crid=3NRZERQ8H4T8L&keywords=dr+reddys+celevida&qid=1672124472&sprefix=%2Caps%2C5801&sr=8-5"

services = Service(r"C:\Users\Deepak Shetter\chromedriver_win32\chromedriver.exe")
driver = webdriver.Chrome(service=services)
driver.get(url)

# 等待价格容器加载完成,超时时间10秒
price_container = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "a-price"))
)
# 获取整数部分和小数部分
price_whole = price_container.find_element(By.CLASS_NAME, "a-price-whole").text
price_fraction = price_container.find_element(By.CLASS_NAME, "a-price-fraction").text
full_price = f"{price_whole}.{price_fraction}"

print("price is", full_price)
driver.quit()

关键注意点

  • 显式等待:亚马逊页面加载存在动态渲染,直接定位元素容易失败,用WebDriverWait等待元素出现后再操作,比time.sleep()更高效稳定。
  • 避免依赖单一class:亚马逊的DOM结构可能调整,通过容器层级定位(如从a-price下找子元素)能提升代码兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:10:21