我用 ruby watir-webdriver 开发了一个爬虫,可以从页面下载一些文件。我的问题是,当我单击下载第二个文件时,Chrome 会在顶部打开一个栏,要求确认我正在从该网站下载多个文件。
一旦被 webdriver 使用,我无法确认下载。有没有办法避免这种确认?我在想是否有任何配置可以避免它,或者是否有扩展来执行此操作,或者即使我可以单击 webdriver 的确认。
谢谢
我用 ruby watir-webdriver 开发了一个爬虫,可以从页面下载一些文件。我的问题是,当我单击下载第二个文件时,Chrome 会在顶部打开一个栏,要求确认我正在从该网站下载多个文件。
一旦被 webdriver 使用,我无法确认下载。有没有办法避免这种确认?我在想是否有任何配置可以避免它,或者是否有扩展来执行此操作,或者即使我可以单击 webdriver 的确认。
谢谢
我正在使用 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);
}
这些设置似乎在不断变化。因此,这是我为我的设置找到正确解决方案的方法:
在Default/Preferences中有一个名为Preferences的 json 文件。打开它并搜索automatic_downloads。就我而言,文件的有趣部分如下所示:
...“profile”:{“avatar_bubble_tutorial_shown”:1,“avatar_index”:0,“content_settings”:{“clear_on_exit_migrated”:true,“exceptions”:{“app_banner”:{},“auto_select_certificate”:{}, "automatic_downloads": { "[ .]localhost:63342, ": { "setting": 1 },...
从中我可以得出正确的设置是chromePrefs.put("profile.content_settings.exceptions.automatic_downloads.*.setting", 1 );
从 Chrome 56.0.2924.87, February 17, 2017 开始,您需要设置的唯一首选项(但是您为 webdriver 设置它们)是:
'profile.default_content_setting_values.automatic_downloads': 1
给出更新的答案,因为这里的大多数答案都使用过时的偏好或显示其他不必要的偏好。
对于新的 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'}
这是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);
希望这对某人有帮助。
似乎对于旧版和新版 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脚本中运行良好,因为我没有收到以下消息:“该站点正在尝试下载多个文件。你想允许这个吗? ”不再。
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);
这对我有用:
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);
此错误/增强功能已在以下 URL 的 chromedriver 页面中提出: http ://code.google.com/p/chromedriver/issues/detail?id=130
错误/增强状态:尚未解决。
我试图在页面加载客户端使用标记来做到这一点。
<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