C# 使用Selenium ChromeDriver修改访问网页时的屏幕分辨率无效问题
问题根源
你目前的操作混淆了浏览器窗口尺寸和网站可读取的系统屏幕分辨率两个概念,无效操作如下:
screen-resolution是ChromeOptions不识别的自定义Capability,添加后不会生效--window-size启动参数、driver.Manage().Window.Size修改的只是浏览器窗口的显示大小,网站通过window.screen系列API读取的是主机显示器的硬件参数,默认会返回你主机的1920×1080分辨率,不会随窗口大小变化。
解决方法
Chrome 93+搭配对应版本的ChromeDriver支持通过Chrome DevTools协议直接覆盖设备分辨率参数,修改后网站读取的分辨率会同步变更,操作步骤如下:
- 先清理原有无效代码:
- 删除
op.AddAdditionalCapability("screen-resolution", "-screenwidth 1024 -screenheight 768", true); - 删掉重复的
op.AddArgument("window-size=771,360");,仅保留带--前缀的op.AddArgument("--window-size=771,360");即可
- 删除
- 初始化driver后添加分辨率覆盖代码,C#示例如下:
using OpenQA.Selenium.Chrome.DevTools; using DevTools.Selenium.DevTools.V93.Emulation; // 原有初始化driver逻辑不变 driver = new ChromeDriver(op); // 新增分辨率覆盖代码 var chromeDriver = driver as ChromeDriver; var devToolsSession = chromeDriver.GetDevToolsSession(); devToolsSession.SendCommand(new SetDeviceMetricsOverrideCommandSettings { Width = 771, Height = 360, DeviceScaleFactor = 1, Mobile = false }).Wait(); driver.Navigate().GoToUrl("https://bestfirms.com/what-is-my-screen-resolution/");
修改完成后再次访问分辨率检测页面,即可看到识别结果为你设置的771×360。
内容的提问来源于stack exchange,提问作者VitalyIO
相关产品推荐
相关产品推荐

