0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

selenium如何更改request的header

Posted at

在使用 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 或代理工具。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?