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

使用Python版Selenium WebDriver自动化访问亚马逊时,Amazon Bestsellers Rank无法稳定显示的问题求助

解决亚马逊Selenium无法获取畅销排名的问题

我之前也碰到过完全一样的情况!亚马逊对自动化工具的检测特别严格,而且页面里很多内容是动态加载的,这两个因素加起来就导致了手动能看到排名,但Selenium经常抓不到的问题,偶尔能显示纯粹是运气好没被盯上😂。

下面是我亲测有效的几个解决方案,按优先级排序:

1. 隐藏Selenium的自动化特征(最关键)

亚马逊会通过检查浏览器的navigator.webdriver属性、窗口特征等判断是不是自动化工具。普通的Selenium很容易被识别,这时候页面会故意不加载部分内容(包括畅销排名)。

推荐用undetected_chromedriver这个库,它专门针对反爬做了优化,能自动隐藏Selenium的特征:

import undetected_chromedriver as uc

# 初始化浏览器
driver = uc.Chrome()
# 打开商品页面
driver.get("https://www.amazon.com/your-t-shirt-product-url")

如果不想用第三方库,也可以手动修改ChromeOptions来伪装:

from selenium import webdriver

options = webdriver.ChromeOptions()
# 禁用自动化控制提示
options.add_argument("--disable-blink-features=AutomationControlled")
# 排除自动化开关
options.add_experimental_option("excludeSwitches", ["enable-automation"])
# 禁用自动化扩展
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=options)
# 执行JS重写webdriver属性
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

2. 优化等待逻辑,确保元素完全加载

手动浏览时,页面会逐步加载内容,但Selenium可能在页面还没完全渲染好就开始查找元素。别用time.sleep()这种硬等待,改用显式等待,直到排名元素出现再去提取:

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)
# 定位畅销排名元素(xpath可能需要根据实际页面调整)
rank_element = wait.until(
    EC.presence_of_element_located(
        (By.XPATH, "//span[contains(text(), 'Amazon Bestsellers Rank')]/following-sibling::span")
    )
)
print("畅销排名:", rank_element.text)

另外,有时候排名区域在页面下方,需要滚动到对应位置才会触发加载:

# 滚动到商品详情区域
detail_section = driver.find_element(By.ID, "detailBulletsWrapper_feature_div")
driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth'});", detail_section)
# 滚动后再等待一下元素加载
import time
time.sleep(2) # 这里短时间sleep辅助,结合显式等待效果更好

3. 模拟人类行为(辅助手段)

偶尔可以加一些人类浏览的小动作,比如随机点击页面空白处、滚动页面上下移动,降低被判定为机器人的概率:

import random

# 点击页面空白区域
driver.find_element(By.TAG_NAME, "body").click()
# 随机滚动一点距离
driver.execute_script(f"window.scrollBy(0, {random.randint(100, 300)});")

总结一下:核心是先解决被亚马逊识别为自动化的问题,再确保元素加载完成,这两个步骤搞定后,基本就能稳定获取到畅销排名了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:42:36