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

Selenium爬取Wildberries页面仅加载菜单无法获取商品内容咨询

问题根因

你无法获取商品列表内容,核心是三个问题:

  • Wildberries的反爬检测不止覆盖Blink自动化特征,默认Selenium的多个标识点都会被识别,拦截动态数据加载
  • 页面商品列表是JS异步渲染的,你发起页面请求后没有等待内容加载完成就直接抓取源码,此时商品节点还没插入DOM
  • 你贴的代码本身存在语法错误:chrome_options=opts) 为残缺语句,最后查找节点使用了未定义的text变量,而非你实例化的soup对象。
Selenium 配置调整方案

按以下方式修改启动配置和加载逻辑,即可正常拿到渲染后的页面内容:

  • 补全反检测启动参数,不要只加Blink特征禁用项:
    • 排除enable-automation启动开关,移除浏览器顶部的自动化控制提示标识
    • 关闭自动化扩展程序,移除webdriver只读属性的暴露特征
    • 替换默认的Selenium User-Agent为真实浏览器UA,若使用无头模式请选用--headless=new新无头模式,旧版无头模式特征极易被识别
  • 增加显式等待逻辑,等商品容器节点加载完成后再抓取页面源码,不要在driver.get()执行后立刻取源码

修正后的可运行代码示例:

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

url = 'https://www.wildberries.ru/catalog/detyam/odezhda/dlya-devochek/dzhinsy-dzhegginsy'
opts = webdriver.ChromeOptions()
# 反检测配置
opts.add_argument("--disable-blink-features=AutomationControlled")
opts.add_experimental_option("excludeSwitches", ["enable-automation"])
opts.add_experimental_option('useAutomationExtension', False)
opts.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36')
# 若需要无头模式打开下方注释
# opts.add_argument("--headless=new")

driver = webdriver.Chrome(options=opts)
# 移除webdriver标识
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})

driver.get(url)
# 显式等待10秒,直到商品卡片容器加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'product-card__wrapper'))
)
soup = bs4.BeautifulSoup(driver.page_source, 'lxml')
# 修正之前的变量名错误,用soup查找节点
container = soup.find_all('div', class_='product-card__wrapper')
print(len(container)) # 正常情况下单页会输出100个商品节点
driver.quit()

如果按上面配置还是被检测,可以直接替换为适配过反检测的Chrome驱动包,不需要手动写这些配置,开箱即可绕过常规的自动化检测。

更高效的无浏览器爬取方案

Selenium渲染页面的爬取方式效率极低,Wildberries的商品列表数据是通过公开的前端接口返回的,不需要签名、不需要登录,直接请求接口拿结构化JSON数据的方式稳定性和效率高很多:

  • 打开目标分类页时抓包,可以看到返回商品数据的接口路径,接口返回的JSON包含商品ID、标题、价格、评分、库存、图片地址等全量字段,比解析HTML得到的信息更全
  • 请求接口时只需要携带正常的浏览器UA,加上对应分类页的Referer头即可正常返回数据,不会被拦截
  • 控制请求间隔在1-2秒,不要高频并发请求,就不会触发IP封禁

简单的请求示例代码:

import requests

# 替换为你抓包拿到的对应分类接口地址
api_url = "对应分类的商品列表接口地址"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Referer": "https://www.wildberries.ru/"
}
params = {
    "appType": "1",
    "curr": "rub",
    "dest": "-1257786",
    "page": "1",
    # 其他接口参数从抓包信息里补全即可
}
resp = requests.get(api_url, headers=headers, params=params)
goods_data = resp.json()
# 直接从JSON里取商品字段即可,不需要解析HTML

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:01:42