如何禁用'此类文件可能会损害您的计算机'弹出

时间:2015-12-07 09:58:28

标签: selenium selenium-chromedriver

我使用selenium chromedriver自动化Web应用程序。 在我的应用程序中,我需要下载xml文件。但是当我下载xml文件时,我得到了这种类型的文件可能会损害您的计算机'弹出。我想使用selenium chromedriver禁用此弹出窗口,我希望始终下载这些类型的文件。如何才能做到这一点? enter image description here

  • Selenium版本:2.47.1
  • Chromedriver版本:2.19
从2012起

更新long standing Chrome bug

9 个答案:

答案 0 :(得分:17)

从Chrome 47.0.2526.80 m开始,我发现了XML文件的问题。 在花了6个小时试图关闭所有可能的安全选项后,我尝试了一种不同的方法。

具有讽刺意味的是,似乎转动开启 Chrome选项"Protect you and your device from dangerous sites"会删除邮件"This type of file can harm your computer. Do you want to keep file.xml anyway?"

我正在使用'Ruby'和'Watir-Webdriver',代码如下所示:

prefs = {
    'safebrowsing' => {
        'enabled' => true,
    }
}

b = Watir::Browser.new :chrome, :prefs => prefs

在启用safebrowsing选项的情况下启动这样的浏览器,下载xml文件而不显示消息警告。对于任何编程语言的Selenium,原则应该是相同的。

##### 编辑:13-04-2017

在最新版Google Chrome中,上述解决方案还不够。此外,还需要使用以下开关启动浏览器:

--safebrowsing-disable-download-protection

现在,启动浏览器的代码如下所示:

b = Watir::Browser.new :chrome, :prefs => prefs, :switches => %w[--safebrowsing-disable-download-protection]))

答案 1 :(得分:4)

我发布下面的文件下载完整代码为我工作: 希望它有所帮助:-)我正在使用Java-Selenium

$scope.isValid = function (orderItem) {
        var count = 0;
        angular.forEach(orderItem.menu_modifier_groups, function(group) {
            angular.forEach(group.menu_modifier_items, function (item) {
             count += item.selected ? 1 : 0;
        });
        if (count != group.max_selection_points) {
            return false;
        } else if (count == group.max_selection_points) {
            return true;
        }
    });
}

答案 2 :(得分:4)

以下Python代码适用于我

chromeOptions = webdriver.ChromeOptions()
prefs = {'safebrowsing.enabled': 'false'}
chromeOptions.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=chromeOptions)

答案 3 :(得分:1)

最近更新Chrome后,accepted answer停止了工作。现在,您需要使用--safebrowsing-disable-extension-blacklist--safebrowsing-disable-download-protection命令行开关。这是适用于我的WebdriverIO配置:

var driver = require('webdriverio');
var client = driver.remote({
    desiredCapabilities: {
        browserName: 'chrome',
        chromeOptions: {
            args: [
                'disable-extensions',
                'safebrowsing-disable-extension-blacklist',
                'safebrowsing-disable-download-protection'
            ],
            prefs: {
                'safebrowsing.enabled': true
            }
        }
    }
});

请注意,我也禁用了扩展程序,因为它们通常会干扰自动化测试,但这并不是严格要求解决下载XML和JavaScript文件的问题。

我通过阅读this list找到了这些开关。您也可以在Chromium source

中查看它们

答案 4 :(得分:1)

我最近在使用 Katalon Studio,Chrome 版本 88 时遇到了这个问题。 值得庆幸的是,只有启用安全浏览功能才能解决问题。您可以通过“项目设置”访问设置,然后导航到“所需功能”->“Web UI”->“Chrome”。 如果您没有“首选项”设置,请添加它并将类型设置为字典。然后在值中添加一个名为“safebrowsing.enabled”的布尔值并将值设置为“true”。 结果可能如下所示: enter image description here (而且你可以默认目录设置与这个例子无关)。

答案 5 :(得分:0)

唯一适合我的解决方法:

使用带有Chrome配置文件路径的参数

chromeOptions.add_argument(chrome_profile_path)

在chrome配置文件文件夹中搜索文件download_file_types.pb。 就我而言,..chromedriver\my_profile\FileTypePolicies\36\download_file_types.pb

备份此文件,然后使用任何hexeditor打开(可以使用oline)。

搜索您要下载的文件类型,即xml,然后将其更改为xxx

答案 6 :(得分:0)

我在C#中使用了所有建议的Chrome选项,并且仅当我的Internet连接对我有用时,但当Internet断开连接时,它们都不对我有用。 (我不确定。可能需要Chrome安全浏览器才能连接互联网)

通过使用旧版的chrome(版本71)和chromedriver(版本2.46),下载后,我看到下载的XML文件名包含“ 未确认”和“ crdownload ”延期 并无法正确解析XML文件。 最后,使用Thread.Sleep(1000)创建wait解决了我的问题。

            IWebDriver Driver;

            //chromedriver.exe version2.46 path
            string path = @"C:\cd71";
            ChromeDriverService driverService = ChromeDriverService.CreateDefaultService(path, "chromedriver.exe");
            ChromeOptions options = new ChromeOptions();
            // options.AddArgument("headless");
            options.AddArgument("--window-position=-32000,-32000");
            options.AddUserProfilePreference("download.default_directory", @"c:\xmlFiles");
            options.AddUserProfilePreference("download.prompt_for_download", false);
            options.AddUserProfilePreference("disable-popup-blocking", "true");
            options.AddUserProfilePreference("safebrowsing.enabled", "true");
            Driver = new ChromeDriver(driverService, options);

            try
            {
                 Driver.Navigate().GoToUrl(url);
                 Thread.Sleep(1000);
                 //other works like: XML parse
            }
            catch
            {

            }

答案 7 :(得分:0)

我正在使用Google版本80.0.3987.122(正式版本)(32位)和ChromeDriver 80.0.3987.106。即使在下载.xml文件时添加以下内容,也会出现相同的错误。

$ChromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$ChromeOptions.AddArguments(@(
    "--disable-extensions",
    "--ignore-certificate-errors"))

$download = "C:\temp\download"
$ChromeOptions.AddUserProfilePreference("safebrowsing.enabled", "true");
$ChromeOptions.AddUserProfilePreference("download.default_directory", $download);
$ChromeOptions.AddUserProfilePreference("download.prompt_for_download", "false");
$ChromeOptions.AddUserProfilePreference("download.directory_upgrade", "true");

$ChromeDriver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($chromeOptions)

答案 8 :(得分:0)

对于上下文,我有一个NWEndpoint,其中包含var ipAddressWithPort = newConnection.endpoint.debugDescription if let portRange = ipAddressWithPort.range(of: ":") { ipAddressWithPort.removeSubrange(portRange.lowerBound..<ipAddressWithPort.endIndex) } 个Flash文档及其相应的URL。由于只有在有效登录后才能访问文件,因此我无法使用基于.csv的简单解决方案。

就像.swf一样,下载requests也会触发类似的提示。

没有的答案对我有用。

因此,我删除了所有额外的参数并设置了上面提出的答案,并刚刚创建了Chrome实例.xml

.swf