我可以阻止ChromeDriver连接某些网站吗?使用Selenium时。

3

我希望通过Selenium屏蔽使用c#控制的Google ChromeDriver

这是否可能?

以下是开始使用Selenium并导航的方法:

var Driver = new ChromeDriver();
Driver.Navigate().GoToUrl(URL)

假设我希望特定的Chrome实例不连接http://googleads.g.doubleclick.net:443,这是否可能?当该Chrome实例请求连接http://googleads.g.doubleclick.net:443时,应自动阻止或返回127.0.0.1(我不知道)。我需要一些解决方案来防止驱动程序等待响应。好吧,在看到答案后,我认为我没有很好地澄清问题。我想要的是,我正在导航到一个页面,该页面向其他主机发出许多不必要的请求。我想阻止这些主机,以便页面加载时间更短。我尝试通过编辑etc中的hosts文件,现在效果提高了10倍。但这是系统范围内的。我想知道是否可以同样适用于chromedriver。

如果Selenium没有预先构建的功能,我想你唯一的解决方案就是创建一个计时器(System.Timers.Timer),检查当前URL是否应该被阻止,如果是,告诉驱动程序返回或执行其他操作。 - Tal Vinokurov
谢谢你的回答。我已经更新了我的问题。 - Furkan Gözükara
不确定这会如何运作,但我正在考虑这个解决方案 - 注入JS并使用JQuery的全局Ajax事件处理程序来处理请求事件。使用.ajaxSend()在所需的主机上应用过滤器。 - ekostadinov
1个回答

4
WebDriver故意不允许这个级别的控制,所以简短的回答是不行,你不能通过它来做到这一点。但是有一个解决方案-只需代理所有流量,并将有问题的URI列入黑名单;或者将你正在使用的URI列入白名单。无论哪种方式,都要确保代理及时返回合理的响应(像素文件或404)以获取任何不需要的URI。以下是示例代码(我的C#语言有点生疏:)):
ChromeOptions options = new ChromeOptions();
options.AddArguments("--proxy-server=XXX.XXX.XXX.XXX");
var Driver = new ChromeDriver(options); 

对于Firefox而言,设置方法略有不同,需要在capabilities中进行设置。

代理选项有很多种,从squid这个传说,到我之前为了类似目的使用过的tinyproxy, 任何适合你环境和需求的工具都可以使用。


2
好像很麻烦。我希望浏览器能够支持它。 - Furkan Gözükara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接