Selenium无头模式爬取亚马逊时Sponsored Brand元素缺失如何解决
核心原因
亚马逊内置反爬特征检测机制,旧版Chrome无头模式存在大量可被识别的独有特征,会被亚马逊判定为自动化爬虫,因此拦截或不返回Sponsored Brand这类动态渲染的广告模块内容,这也是你加了常规参数仍无法加载的核心原因。
需补充/修改的配置
替换为新版无头模式参数
Chrome 112及以上版本推出了--headless=new参数,底层渲染逻辑和普通有头模式完全对齐,不会出现渲染差异,直接替换你现有配置中的--headless参数即可。添加反自动化特征配置
移除浏览器的自动化标记,规避亚马逊的爬虫识别策略,具体包括禁用自动化控制标记、关闭自动化扩展、修改无头模式默认UA等。
完整可用配置示例
from selenium.webdriver.chrome.options import Options from selenium import webdriver options = Options() # 新版无头模式,替代旧的--headless参数 options.add_argument("--headless=new") options.add_argument("--window-size=1920,1080") options.add_argument("--start-maximized") options.add_argument("--disable-gpu") options.add_argument("--disable-dev-shm-usage") options.add_argument("--no-sandbox") options.add_argument("--ignore-certificate-errors") options.add_argument("--allow-running-insecure-content") # 禁用自动化控制特征 options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option("useAutomationExtension", False) # 替换为你本地正常使用的Chrome浏览器的User-Agent即可 options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36") driver = webdriver.Chrome(options=options) # 可选:执行JS修改webdriver属性,进一步消除爬虫特征 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" })
补充优化建议
- 页面加载后添加显式等待,针对Sponsored Brand模块设置最长10秒的加载等待,避免元素未完成渲染就执行定位逻辑。
- 如果模块为懒加载触发,可执行JS滚动到对应页面位置触发渲染:
driver.execute_script("window.scrollTo(0, 500)"),滚动高度可根据实际页面结构调整。
内容的提问来源于stack exchange,提问作者Luke Hamilton
相关产品推荐
相关产品推荐

