在使用 Selenium 时,直接更改请求的 header 并不容易,因为 Selenium 本身是一个浏览器自动化工具,主要用于模拟用户操作,而浏览器的请求头(Request Headers)通常由浏览器自行管理。
不过,你可以通过以下几种方法来修改请求头:
方法 1: 使用 webdriver.ChromeOptions 设置某些 headers
如果你需要设置 User-Agent,可以通过 ChromeOptions 配置:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("user-agent=Custom User-Agent String")
driver = webdriver.Chrome(options=options)
启动浏览器并访问目标页面
driver.get("https://example.com")
方法 2: 使用浏览器扩展修改 headers
通过加载一个修改请求头的浏览器扩展,可以动态更改所有请求的 headers。
例如:Modify Header Value 插件或自己写一个。
简单示例:
1. 编写扩展的 manifest.json:
{
"manifest_version": 2,
"name": "Modify Headers",
"version": "1.0",
"permissions": ["webRequest", "webRequestBlocking", ""],
"background": {
"scripts": ["background.js"]
}
}
2. 编写 background.js 修改 header:
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details) {
details.requestHeaders.push({name: "Custom-Header", value: "CustomValue"});
return {requestHeaders: details.requestHeaders};
},
{urls: [""]},
["blocking", "requestHeaders"]
);
3. 使用 Selenium 加载这个扩展:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--load-extension=/path/to/extension")
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
方法 3: 使用代理修改请求头
通过代理工具(如 Mitmproxy 或 Fiddler),可以拦截请求并动态修改 headers。
示例:结合 Selenium 和 Mitmproxy
1. 编写 Mitmproxy 脚本修改 headers:
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
flow.request.headers["Custom-Header"] = "CustomValue"
2. 配置 Selenium 使用 Mitmproxy:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://127.0.0.1:8080") # Mitmproxy 默认端口
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
启动 Mitmproxy 后,运行 Selenium 会经过代理拦截,Headers 会被修改。
方法 4: 使用 DevTools Protocol
通过 Selenium 的 DevTools Protocol,可以拦截并修改请求,包括自定义 Headers:
from selenium import webdriver
driver = webdriver.Chrome()
启用 DevTools
driver.execute_cdp_cmd("Network.enable", {})
修改 Headers
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {
"headers": {
"Custom-Header": "CustomValue",
"User-Agent": "Custom User-Agent"
}
})
打开目标页面
driver.get("https://example.com")
总结
如果只是修改部分 headers(如 User-Agent),直接用 ChromeOptions 最简单;如果需要复杂的定制,推荐使用 DevTools Protocol 或代理工具。