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

Selenium与Selenium-wire为Webdriver添加请求头的方法区别

问题确认

你的认知基本正确,两者修改WebDriver请求头的常规实现路径如下:

  • Selenium-wire:核心通过request_interceptor请求拦截机制实现,支持运行时动态修改任意请求的请求头,可针对不同请求定制不同头信息,覆盖所有页面发起的请求
  • 原生Selenium:本身没有内置运行时动态修改请求头的能力,静态全局固定头的最简易实现方式是通过ChromeOptions传入浏览器启动参数,但该方案局限性很强
示例代码修正

你贴的两段示例代码都存在影响运行/生效的错误,修正后如下:

Selenium-wire 实现(修正版)

原代码存在两个问题:

  1. 拦截函数入参命名为req,函数内部却使用request调用,变量不匹配会抛NameError
  2. 请求头字段名拼写错误,标准字段是Referer而非Refers,拼写错误会导致修改完全不生效
from seleniumwire import webdriver
driver = webdriver.Chrome()

def intercept(req):
    req.headers['Referer'] = 'https://www.google.com/'

driver.request_interceptor = intercept
driver.get('目标访问URL')

该方案会拦截所有浏览器发起的请求(包含页面导航、静态资源加载、接口调用等),统一修改Referer头,也可在拦截函数内根据请求URL做差异化头设置。

原生Selenium ChromeOptions实现(修正版)

原代码存在两个问题:

  1. 同样存在Referer拼写错误,且Chrome启动参数需要加--前缀
  2. 该方案仅对浏览器启动后第一个导航请求生效,页面内的资源请求、异步接口请求、后续跳转请求都不会携带设置的Referer,无法实现全局头修改
from selenium import webdriver

opt = webdriver.ChromeOptions()
referer_val = 'https://www.google.com/'
opt.add_argument(f'--referer={referer_val}')

driver = webdriver.Chrome(options=opt)

如果需要用原生Selenium实现全局动态请求头修改,不需要依赖第三方库的话,可以直接调用Chrome DevTools Protocol接口实现,效果和Selenium-wire接近。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:33:26