Selenium4+C#修改Chrome的sec-ch-ua-platform等参数失败求助
解决Selenium4 C#修改Chrome客户端提示参数(sec-ch-ua/sec-ch-ua-platform)无效的问题
问题说明
在为流量机器人开发基于Selenium4的C#代码时,尝试修改Chrome的sec-ch-ua-platform、sec-ch-ua等User-Agent客户端提示参数,但修改始终未生效。参考Stack Overflow上的Python解决方案转成C#代码后仍无法解决,以下是两段无效的尝试代码。
无效尝试代码
尝试代码1
string Url = "https://whatismyipaddress.com/"; ChromeOptions ChromeOptions = new ChromeOptions(); ChromeOptions.AddArgument("ignore-certificate-errors"); ChromeOptions.AddArgument("--sec-ch-ua-platform=Android"); ChromeOptions.AddArgument("--sec-ch-ua-mobile=?1"); ChromeOptions.AddArgument("--sec-ch-ua=Chromium\";; v = \"110\", \"Not A(Brand\";; v = \"23\", \"Google Chrome\";; v = \"109"); ChromeOptions.AddArgument("--user-agent=Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"); /// disable image ChromeOptions.AddArguments("--disable-images"); ChromeOptions.AddArguments("--start-maximized"); ChromeOptions.AddUserProfilePreference("profile.default_content_setting_values.images", 2); //MainMenu code driver = new ChromeDriver(ChromeOptions); driver.Navigate().GoToUrl(Url);
尝试代码2
string sec_ch_ua = "\"Examplary Browser\"; v=\"73\", \";Not?A.Brand\"; v=\"27\""; ChromeOptions options = new ChromeOptions(); options.AddArgument($"--sec-ch-ua={sec_ch_ua}"); //ChromeOptions.AddArgument("--sec-ch-ua-platform=Android"); //ChromeOptions.AddArgument("--user-agent-platform=Android");
有效解决方案
Chrome的sec-ch-ua系列参数属于User-Agent Client Hints,无法通过Chrome启动参数直接覆盖,必须借助Chrome DevTools Protocol(CDP)的Emulation.setUserAgentOverride命令来设置,该命令会同步更新user-agent字符串及对应的客户端提示元数据,确保参数生效。
完整有效代码
string url = "https://whatismyipaddress.com/"; ChromeOptions options = new ChromeOptions(); options.AddArgument("ignore-certificate-errors"); options.AddArgument("--disable-images"); options.AddArgument("--start-maximized"); options.AddUserProfilePreference("profile.default_content_setting_values.images", 2); // 初始化Chrome驱动 var driver = new ChromeDriver(options); // 创建DevTools会话 var devToolsSession = driver.CreateDevToolsSession(); // 定义需要设置的参数 var targetUserAgent = "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"; var targetPlatform = "Android"; // 使用CDP命令覆盖User-Agent及客户端提示元数据 devToolsSession.SendCommand("Emulation.setUserAgentOverride", new Dictionary<string, object> { ["userAgent"] = targetUserAgent, ["platform"] = targetPlatform, ["userAgentMetadata"] = new Dictionary<string, object> { ["brands"] = new[] { new { brand = "Chromium", version = "110" }, new { brand = "Not A(Brand", version = "23" }, new { brand = "Google Chrome", version = "109" } }, ["platform"] = targetPlatform, ["mobile"] = true // 对应sec-ch-ua-mobile=?1 } }); // 导航到目标页面 driver.Navigate().GoToUrl(url);
关键说明
- CDP命令优先级更高:
Emulation.setUserAgentOverride会直接修改Chrome的User-Agent相关配置,覆盖浏览器默认生成的sec-ch-ua、sec-ch-ua-platform、sec-ch-ua-mobile等参数。 - 参数同步性:通过
userAgentMetadata传入品牌信息、平台和移动端标识,Chrome会自动生成符合规范的sec-ch-ua系列请求头,无需手动拼接格式复杂的字符串。
内容的提问来源于stack exchange,提问作者masoud fallah
相关产品推荐
相关产品推荐

