如何在Golang中运行selenium.WebDriver后修改请求头
启动Selenium WebDriver后修改请求头的方法
启动WebDriver之后,直接修改selenium.Capabilities.prefs.headers是无效的——因为Capabilities是浏览器启动阶段的初始化配置,运行时无法动态变更这部分设置。要在运行中的WebDriver实例上修改请求头,需要借助Chrome DevTools Protocol(CDP)来实现。
以下是针对你的Go代码的修改方案,在注释位置添加动态修改请求头的逻辑:
func main() { caps := selenium.Capabilities{ "browserName": "chrome", "chromeOptions": map[string]interface{}{ "args": []string{ "--disable-extensions", "--disable-plugins", }, "prefs": map[string]interface{}{ "headers": map[string]interface{}{ "User-Agent": "my custom User-Agent", "Accept-Language": "en-US,en;q=0.9", }, }, }, } wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", 4444)) if err != nil { panic(err) } defer wd.Quit() // 动态修改请求头的核心逻辑 // 1. 获取CDP客户端 cdp, err := wd.DevTools() if err != nil { panic(err) } // 2. 设置新的HTTP请求头 extraHeaders := map[string]interface{}{ "User-Agent": "updated custom User-Agent", "Accept-Language": "zh-CN,zh;q=0.9", "X-Custom-Header": "my-custom-value", } err = cdp.Network.SetExtraHTTPHeaders(extraHeaders) if err != nil { panic(err) } // 之后打开页面时,就会使用新的请求头 err = wd.Get("https://example.com") if err != nil { panic(err) } }
补充说明
- 如果只需要修改User-Agent,可以单独使用
cdp.Network.SetUserAgentOverride方法,更精准:err = cdp.Network.SetUserAgentOverride(&network.SetUserAgentOverrideOptions{ UserAgent: "special-user-agent/1.0", }) - 这种方式设置的请求头会对后续所有的页面请求生效,直到你再次调用该方法修改或者关闭WebDriver实例。
内容的提问来源于stack exchange,提问作者Utada Hikki
相关产品推荐
相关产品推荐

