【问题标题】:Disable chrome download multiple files confirmation禁用chrome下载多个文件确认
【发布时间】:2013-04-04 17:02:20
【问题描述】:

我使用 ruby​​ watir-webdriver 开发了一个爬虫,可以从页面下载一些文件。我的问题是,当我点击下载第二个文件时,Chrome 会在顶部打开一个栏,要求确认我正在从该网站下载多个文件。

一旦被 webdriver 使用,我无法确认下载。有没有办法避免这种确认?我在想是否有任何配置可以避免它,或者是否有扩展来执行此操作,或者即使我可以使用 webdriver 单击确认。

谢谢

【问题讨论】:

    标签: google-chrome google-chrome-extension watir watir-webdriver selenium-chromedriver


    【解决方案1】:

    自 Chrome 56.0.2924.87 起,2017 年 2 月 17 日,您需要设置的唯一首选项(无论您如何为您的网络驱动程序设置)是:

    'profile.default_content_setting_values.automatic_downloads': 1
    

    提供更新的答案,因为这里的大多数答案都使用过时的偏好或显示其他不必要的偏好。

    【讨论】:

    • FYI.. 此设置/选项仍然适用于最新的 Chrome 版本,即版本 83.0.4103.116(官方版本)(64 位)。久经考验。
    【解决方案2】:

    我使用的是 Chrome 49,其他解决方案均不适合我。 经过一番研究,我找到了一个可行的解决方案:

    ChromeDriver createChromeDriverWithDownloadFolder(String folder) {
        Map<String, Object> chromePrefs = new HashMap<String, Object>();
        chromePrefs.put("profile.default_content_settings.popups", 0);
        chromePrefs.put("download.default_directory", folder);
        chromePrefs.put("profile.content_settings.exceptions.automatic_downloads.*.setting", 1 );
        chromePrefs.put("download.prompt_for_download", false);
    
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("prefs", chromePrefs);
        DesiredCapabilities cap = DesiredCapabilities.chrome();
        cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        cap.setCapability(ChromeOptions.CAPABILITY, options);
        return new ChromeDriver(cap);
    }
    

    这些设置似乎在不断变化。因此,以下是我为我的设置找到正确解决方案的方法:

    1. 打开 Chrome 并转到 chrome://version/ 以查找您的个人资料的路径
    2. Default/Preferences 中是一个名为 Preferences 的 json 文件。打开它并搜索 automatic_downloads。 就我而言,文件中有趣的部分如下所示:

      ...“个人资料”:{ “avatar_bubble_tutorial_shown”:1, “头像索引”:0, “内容设置”: { “clear_on_exit_migrated”:是的, “例外”:{ “app_banner”:{}, “auto_select_certificate”:{}, “自动下载”:{ "[.]localhost:63342,": { “设置”:1 },...

    3. 从中我可以得出正确的设置是chromePrefs.put("profile.content_settings.exceptions.automatic_downloads.*.setting", 1 );

    【讨论】:

    • 谢谢。给定的解决方案在 chrome 51 和 chrome driver 2.20 上为我工作。
    • 感谢它在最新的 chrome 浏览器和 chrome 驱动程序版本上为我工作
    【解决方案3】:

    这对我有用:

    HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
    chromePrefs.put("profile.default_content_settings.popups", 0);
    chromePrefs.put("profile.default_content_setting_values.automatic_downloads", 1);
    chromePrefs.put("download.prompt_for_download", false);
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("prefs", chromePrefs);
    DesiredCapabilities cap = DesiredCapabilities.chrome();
    cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    cap.setCapability(ChromeOptions.CAPABILITY, options);
    

    【讨论】:

      【解决方案4】:

      对于新的 chrome(版本 46 或更高版本),此选项已更改 现在您的哈希必须如下所示:

      prefs = {
          'profile' => {
              'default_content_settings' => {'multiple-automatic-downloads' => 1}, #for chrome version olde ~42
              'default_content_setting_values' => {'automatic_downloads' => 1}, #for chrome newer 46
          }
      }
      
      browser = Watir::Browser.new :chrome, options: {prefs: prefs, args: ['--test-type', '--disable-infobars'}
      

      【讨论】:

      • 这个解决方案对我有用,但破坏了我最初处理浏览器窗口大小的方式。是否有一个网站列出了可以进行的所有更改?
      • 此解决方案在 66 版中使用 chromedriver in selenium 和 perl。
      【解决方案5】:

      这里是Java的解决方案——Selenium实现

      我们很难解决这个问题,因为我们想为在单个下载链接上下载 PDF 集的功能添加自动化测试。

      Map<String, Object> prefs = new HashMap<String, Object>();
      //To Turns off multiple download warning
      prefs.put("profile.default_content_settings.popups", 0);
      prefs.put( "profile.content_settings.pattern_pairs.*.multiple-automatic-downloads", 1 );
      //Turns off download prompt
      prefs.put("download.prompt_for_download", false);
      ChromeOptions options = new ChromeOptions();
      options.setExperimentalOptions("prefs", prefs);
      driver =  new ChromeDriver(options);
      

      希望这对某人有所帮助。

      【讨论】:

      • 你有javascript版本吗?我什至可以从客户端使用 Javascript 做到这一点吗?我需要的只是将 multiple-automatic-downloads" 设置为 1 (true) !! 因为我不想看到询问它的提示。
      • 不,我没有 javascript 版本。不确定,但应该可以。
      【解决方案6】:

      似乎旧版和新版 chromedriver 的解决方案有所不同,这增加了混乱。

      chromedriver

      profile = Selenium::WebDriver::Chrome::Profile.new
      profile['download.prompt_for_download'] = false
      profile['download.default_directory'] = download_directory
      
      b = Watir::Browser.new :chrome, :profile => profile
      

      chromedriver2

      prefs = {
            'profile' => {
                'default_content_settings' => {'multiple-automatic-downloads' => 1},
            }
        }
      
      b = Watir::Browser.new :chrome, :prefs => prefs
      

      今天大多数人可能都在使用 chromedriver2 版本,这是一个应该可以正常工作的解决方案。它在我的 watir 脚本中运行良好,因为我没有收到以下消息:“此站点正在尝试下载多个文件。你要允许这个吗?”了。

      【讨论】:

        【解决方案7】:

        Java 解决方案:

        cap = DesiredCapabilities.chrome();
        ChromeOptions options = new ChromeOptions();
        Map<String, Object> prefs = new HashMap<>();
        Map<String, Object> content_setting = new HashMap <>();
        
        content_setting.put("multiple-automatic-downloads",1);
        
        prefs.put("download.prompt_for_download", "false");
        prefs.put("profile.default_content_settings", content_setting);
        
        options.setExperimentalOption("prefs", prefs);
        cap.setCapability(ChromeOptions.CAPABILITY, options);
        

        【讨论】:

          【解决方案8】:

          此错误/增强功能已在以下 URL 的 chromedriver 页面中提出: http://code.google.com/p/chromedriver/issues/detail?id=130

          错误/增强状态:尚未解决。

          【讨论】:

          • 你有解决办法吗?
          【解决方案9】:

          我已经尝试在页面加载客户端使用标记来做到这一点。

          <META HTTP-EQUIV="Content-Disposition" CONTENT="inline" />
          

          它似乎可以工作(此时它正在工作,覆盖)。

          但时间会证明一切(可能对未来的 CHROME 没有影响,你知道我的意思)。

          在几个网站上发布了可用的标题字段列表,我觉得它们非常有用。希望对你也有帮助。

          https://www.w3.org/Protocols/HTTP/Issues/content-disposition.txt https://www.iana.org/assignments/cont-disp/cont-disp.xhtml#cont-disp-2

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-20
            • 2011-11-19
            • 1970-01-01
            相关资源
            最近更新 更多