如何在C# Selenium Chrome中配置UserAgentMetadata修改请求头
解决方案
你不能直接将UserAgentMetadata作为命令行参数传入ChromeOptions,需要通过Chrome DevTools协议(CDP)的Emulation.setUserAgentOverride命令来完成设置。以下是修正后的完整代码:
using System; using System.IO; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.DevTools; using OpenQA.Selenium.DevTools.V109.Emulation; namespace web_traffic { internal class DevTraffic { ChromeDriver driver; string path = Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName; public void SetUserMeta() { string url = "https://whatismyipaddress.com/"; ChromeOptions chromeOptions = new ChromeOptions(); // 初始化Chrome驱动 driver = new ChromeDriver(chromeOptions); // 获取DevTools会话(版本需与Chrome浏览器版本匹配,这里用V109) var devTools = driver.CreateDevToolsSession(); var emulationDomain = devTools.GetVersionSpecificDomains<V109.DevToolsSessionDomains>().Emulation; // 构建UserAgentMetadata var agentMetadata = new UserAgentMetadata { Mobile = true, Platform = "Android", Architecture = "x86", Model = "SM-G973F", // 可选,补充设备型号 PlatformVersion = "10" // 可选,补充系统版本 }; // 构建UA覆盖设置,需搭配匹配的UserAgent字符串 var userAgentOverrideSettings = new SetUserAgentOverrideCommandSettings { UserAgent = "Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36", UserAgentMetadata = agentMetadata }; // 发送CDP命令设置UA及Metadata emulationDomain.SetUserAgentOverride(userAgentOverrideSettings); // 导航到目标页面 driver.Navigate().GoToUrl(url); } } }
关键说明:
- DevTools版本匹配:确保引用的
OpenQA.Selenium.DevTools.V109版本与你使用的Chrome浏览器版本一致,否则会出现兼容性问题。 - UserAgent字符串匹配:设置
UserAgentMetadata时,需要搭配对应的真实UserAgent字符串,否则可能导致网站识别异常。 - DevTools会话初始化:必须在驱动实例创建后,再初始化DevTools会话并发送命令。
内容的提问来源于stack exchange,提问作者masoud fallah
相关产品推荐
相关产品推荐

