配置Selenium WebDrive以忽略某些指定文件(.js或.css)的加载

时间:2018-01-22 13:51:17

标签: c# selenium selenium-webdriver webdriver selenium-chromedriver

我的方案是:我使用Selenium WebDriver运行Web自动化来获取数据并在网站中进行动态导航。有时,包含不相关代码的javascript文件加载时间超过1分钟,这会使我的所有代码运行缓慢 - 因为当Selenium WebDriver加载页面时,它会等待加载所有文件。

由于我无法访问更改或修改页面源代码,因此我没有找到解决方法。我注意到附近的解决方法可能有用,就是在我的ChromeDriver中应用扩展程序(如AdBlocker)。

另外,到目前为止我使用AdBlock扩展程序做了什么:

ChromeOptions option = new ChromeOptions();
option.AddExtension("/adblock.crx");
Driver = new ChromeDriver(option);
// Here i need to block the file manually when Chrome window open 
// (it is also not a problem)

Driver.Manage().Window.Maximize();
Driver.Navigate().GoToUrl(myUrl);
// Here, any url with a js file that I don't want to download

Selenium WebDriver documentationCapabilities list中没有提及能够忽略或阻止指定文件加载的方法或函数,例如AdBlock或其他类似的扩展名。所以,我想知道是否可以在不使用外部扩展的情况下这样做。

1 个答案:

答案 0 :(得分:1)

简单回答,没有

WebDriver旨在模拟具有默认设置的浏览器。因为默认情况下,浏览器会加载所有要求的内容,运行所有JavaScript并呈现所有CSS。

根据JavaScript的位置,有一种可能的选择。如果JS文件位于唯一的服务器上(而不是托管您尝试抓取的站点的服务器),则可以在计算机上编辑主机文件,以取消尝试访问该服务器。

您可以在其他地方找到更多/更好的文档,但要点是在主机文件中添加一行,如下所示:

problem_server.com    127.0.0.1

如果符合以下条件,将无法使用

  • .js文件与网站的其他部分位于同一服务器上
  • .js文件与您需要正常工作的其他文件位于同一服务器上

如果是这种情况,你需要坚持像AdBlock一样更精细的东西。