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

Selenium使用SetUserAgentOverride修改UA及userAgentData跳转后失效问题

问题原因

DevTools协议的SetUserAgentOverride配置默认仅作用于当前生效的单个页面上下文(target),当发生页面跳转、新窗口/新标签页打开时,会生成新的独立target,原有配置不会自动同步到新target,因此会失效。同时你使用的代码未配置UserAgentMetadata参数,无法覆盖userAgentData相关的读取请求。

解决步骤
  1. 优先使用Emulation域的覆写接口
    Network域的UA覆写仅能修改请求头的UA字段,Emulation域的SetUserAgentOverride才支持同时配置UserAgentMetadata,匹配你修改userAgentData的需求。

  2. 监听新target创建事件,自动同步配置
    通过DevTools的Target域监听页面上下文创建事件,每生成新的target就自动执行UA覆写操作,保证配置全局生效:

// 先启用Target域
var devTools = driver as IDevTools;
var session = devTools.GetDevToolsSession();
var domains = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V94.DevToolsSessionDomains>();
await domains.Target.Enable(new OpenQA.Selenium.DevTools.V94.Target.EnableCommandSettings());

// 配置自动附加到所有新target
await domains.Target.SetAutoAttach(new OpenQA.Selenium.DevTools.V94.Target.SetAutoAttachCommandSettings()
{
    AutoAttach = true,
    WaitForDebuggerOnStart = false,
    Flatten = true
});

// 封装UA覆写方法,包含userAgentData配置
async Task SetCustomUA()
{
    await domains.Emulation.SetUserAgentOverride(new OpenQA.Selenium.DevTools.V94.Emulation.SetUserAgentOverrideCommandSettings()
    {
        UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4664.45 Safari/537.36",
        // 配置userAgentData对应的元数据,可根据需求调整参数
        UserAgentMetadata = new OpenQA.Selenium.DevTools.V94.Emulation.UserAgentMetadata()
        {
            Brands = new OpenQA.Selenium.DevTools.V94.Emulation.UserAgentBrandVersion[]
            {
                new OpenQA.Selenium.DevTools.V94.Emulation.UserAgentBrandVersion() { Brand = "Google Chrome", Version = "95" },
                new OpenQA.Selenium.DevTools.V94.Emulation.UserAgentBrandVersion() { Brand = "Chromium", Version = "95" },
                new OpenQA.Selenium.DevTools.V94.Emulation.UserAgentBrandVersion() { Brand = ";Not A Brand", Version = "99" }
            },
            Platform = "Windows",
            PlatformVersion = "10.0",
            Architecture = "x86",
            Mobile = false
        }
    });
}

// 首次初始化时执行一次
await SetCustomUA();

// 监听target附加事件,新target加载时自动重新设置UA
session.DevToolsEventReceived += (sender, e) =>
{
    if (e.EventName == "Target.attachedToTarget")
    {
        SetCustomUA().Wait();
    }
};
  1. 可选兜底方案
    如果跳转场景仍偶发失效,可以在每次调用driver.Navigate().GoToUrl()、切换窗口执行driver.SwitchTo().Window()后,主动调用一次上面封装的SetCustomUA()方法,双重保证配置生效。
注意事项
  • 代码中用到的DevTools域版本(示例为V94)需要和你实际运行的Chrome浏览器版本严格对应,否则会出现接口不兼容报错。
  • 确保Selenium版本在4.0及以上,才支持完整的DevTools协议操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:00