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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:02:51