ChromeDriver调用ExecuteCdpCommand执行Network.setBlockedURLs参数无效异常排查
问题原因及修复方案
核心问题有两个:
- 字典键重复:你用
Dictionary<string, object>定义参数时,重复使用了"urls"作为键,字典的键是唯一的,后面的"*.js"会直接覆盖前面的"analytics.google.com",等于只传了一条规则。 - 参数类型不匹配:
Network.setBlockedURLs要求urls参数是字符串数组(列表),但你传的是单个字符串,这才是触发invalid argument异常的直接原因。
修复后的代码:
调整blocked_resources的结构,用字符串数组作为"urls"的值:
ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService(@"C:\"); chromeDriverService.HideCommandPromptWindow = true; ChromeOptions opts = new ChromeOptions(); opts.PageLoadStrategy = PageLoadStrategy.None; Proxy proxy = new Proxy(); proxy.Kind = ProxyKind.Manual; proxy.IsAutoDetect = false; proxy.SslProxy = ip_string; opts.Proxy = proxy; driver = new ChromeDriver(chromeDriverService, opts); chrome_id = chromeDriverService.ProcessId; // 正确的参数结构:urls对应字符串数组 var blocked_resources = new Dictionary<string, object> { { "urls", new[] { "analytics.google.com", "*.js" } } }; ((ChromeDriver)driver).ExecuteCdpCommand("Network.setBlockedURLs", blocked_resources);
额外提示:
如果调用后仍有异常,可以先手动启用Network域(大部分场景下Selenium会自动处理,但特殊情况需要补充):
((ChromeDriver)driver).ExecuteCdpCommand("Network.enable", new Dictionary<string, object>());
内容的提问来源于stack exchange,提问作者WildBill
相关产品推荐
相关产品推荐

