我使用ruby watir-webdriver开发了一个爬虫程序,可以从页面下载一些文件。我的问题是,当我点击下载第二个文件时,Chrome会在顶部打开一个栏,要求确认我正在从此网站下载多个文件。
webdriver使用后,我无法确认下载。反正有没有这个确认?我在想是否有任何配置可以避免它或者是否有扩展来执行此操作,或者即使我可以使用webdriver单击确认。
感谢
答案 0 :(得分:12)
我正在使用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 。 在我的例子中,文件的有趣部分看起来像这样:
...“个人资料”:{ “avatar_bubble_tutorial_shown”:1, “avatar_index”:0, “内容设置”: { “clear_on_exit_migrated”:是的, “例外”:{ “app_banner”:{}, “auto_select_certificate”:{}, “automatic_downloads”:{ “[。] localhost:63342,”:{ “设定”:1 },...
由此可以得出正确的设置为chromePrefs.put("profile.content_settings.exceptions.automatic_downloads.*.setting", 1 );
答案 1 :(得分: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'}
答案 2 :(得分:4)
自Chrome 56.0.2924.87,2017年2月17日以来,您需要设置的仅偏好设置(无论您为webdriver设置它们)是:
'profile.default_content_setting_values.automatic_downloads': 1
提供更新的答案,因为此处的大多数答案都使用过时的偏好设置或显示其他不必要的偏好。
答案 3 :(得分:3)
以下是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);
希望对某人有所帮助。
答案 4 :(得分:2)
似乎解决方案对于较旧和较新的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 脚本中运行正常,因为我没有收到消息:&#34; 此站点正在尝试下载多个文件。你想允许吗?&#34;了。
答案 5 :(得分:1)
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);
答案 6 :(得分:0)
此错误/增强功能已在以下网址的chromedriver页面中引发: http://code.google.com/p/chromedriver/issues/detail?id=130
错误/增强状态:尚待解决。
答案 7 :(得分:0)
这对我有用:
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);
答案 8 :(得分:0)
我尝试使用标记在页面加载客户端上执行此操作。
<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