【问题标题】:How to disable 'This type of file can harm your computer' pop up如何禁用“此类文件可能会损坏您的计算机”弹出窗口
【发布时间】:2016-03-11 21:22:35
【问题描述】:

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

  • 硒版本:2.47.1
  • Chrome 驱动程序版本:2.19

更新它是 2012 年的 long standing Chrome bug

【问题讨论】:

  • 弹出窗口是否有确定/取消按钮?
  • 弹出窗口有“保留”和“放弃”按钮。
  • 您不应该禁用它,但您可以使用alert.accept() 来处理该弹出窗口。它会点击保持并继续你的脚本。
  • 那个弹窗不是应用弹窗。那是chrome默认弹出。附上相关截图。
  • 好的,你不能关闭它。在您的 chrome 中设置下载时要求保存文件,然后尝试使用alert.accept()

标签: selenium selenium-chromedriver


【解决方案1】:

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

具有讽刺意味的是,似乎打开 on 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

在最新版本的谷歌浏览器中,上述解决方案是不够的。此外,需要使用以下开关启动浏览器:

--safebrowsing-disable-download-protection

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

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

【讨论】:

  • 用Java怎么做?
  • 根据chromedriver/capabilities的例子应该是这样的:ChromeOptions options = new ChromeOptions(); Map<String, Object> prefs = new HashMap<String, Object>(); prefs.put("safebrowsing.enabled", "true"); options.setExperimentalOption("prefs", prefs); ChromeDriver chromeDriver = new ChromeDriver(options);
  • 在 python 中工作:opts = webdriver.ChromeOptions(); opts.add_experimental_option('prefs', {'safebrowsing.enabled': True}); opts.add_argument('--safebrowsing-disable-download-protection'); driver = webdriver.Chrome(chrome_options=opts)
【解决方案2】:

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

System.setProperty("webdriver.chrome.driver", "C:/chromedriver/chromedriver.exe");
        String downloadFilepath = "D:/MyDeskDownload";
        HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
        chromePrefs.put("profile.default_content_settings.popups", 0);
        chromePrefs.put("download.default_directory", downloadFilepath);
        chromePrefs.put("safebrowsing.enabled", "true"); 
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("prefs", chromePrefs);
        DesiredCapabilities cap = DesiredCapabilities.chrome();
        cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        cap.setCapability(ChromeOptions.CAPABILITY, options);
        WebDriver driver = new ChromeDriver(cap);

【讨论】:

    【解决方案3】:

    以下 Python 代码对我有用

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

    【讨论】:

      【解决方案4】:

      最近更新 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 中看到它们。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          唯一适合我的解决方法:

          使用带有 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

          【讨论】:

            【解决方案7】:

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

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

                        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
                        {
            
                        }
            

            【讨论】:

              【解决方案8】:

              就上下文而言,我有一个.csv,其中包含.swf 闪存文档及其各自网址的列表。由于只有在有效登录后才能访问这些文件,因此我无法使用基于 requests 的简单解决方案。

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

              没有一个答案对我有用。

              所以我剥离了上述答案提出的所有额外参数和设置,只创建了 chrome 实例headless

              options.add_argument("--headless")
              
              prefs = {
                  "download.default_directory": "C:\LOL\Flash",
                  "download.prompt_for_download": False,
                  "download.directory_upgrade": True,
              }
              options.add_experimental_option("prefs",prefs)
              

              【讨论】:

                【解决方案9】:

                我使用的是 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)
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-09-10
                  • 2020-10-30
                  • 2016-10-04
                  • 1970-01-01
                  • 2019-08-19
                  • 1970-01-01
                  相关资源
                  最近更新 更多