如何使用FirefoxProfile在Firefox浏览器中自动下载?

3
我正在使用selenium java工作,需要下载pdf文件。我参考了这里的答案答案答案,但似乎在我的情况下都不起作用。是否由于设置了新的firefox driver实例,即System.setProperty("webdriver.firefox.bin", "D:\\FFF\\firefox.exe");?我卡在这里了。然而,当我手动单击MIME对话框上的保存文件时,它会正确保存到我的自定义位置。此外,我的下载链接代码位于另一个java类中,下面的代码位于另一个类中,但我使用与此类声明的相同的驱动程序。以下是我的代码:
FirefoxProfile profile = new FirefoxProfile();
//Set Location to store files after downloading.
profile.setPreference("browser.download.folderList", 2);
profile.setPreference( "browser.download.manager.showWhenStarting", false );
profile.setPreference("browser.download.dir", "D:\\WebDriverDownloads");
profile.setPreference("pdfjs.disabled", true);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf"); 
System.setProperty("webdriver.firefox.bin", "D:\\FFF\\firefox.exe");
driver = new FirefoxDriver(profile);

为什么browser.helperApps.neverAsk.saveToDisk选项被注释掉了,你正在下载什么类型的文件。如果不确定,请在Chrome的网络选项卡中检查下载文件。 - Gaurang Shah
抱歉,我的错。只有PDF文件。问题已经修改。 - Prasad_Joshi
当您单击应该下载文件的链接时会发生什么?它会在另一个标签页中打开吗? - Gaurang Shah
是的...它会打开一个空白标签一毫秒,然后打开一个MIME对话框,询问是否“使用”或“保存文件”。 - Prasad_Joshi
你能否尝试使用 application/x-pdf,并在设置了 about:config 属性后手动尝试? - Gaurang Shah
1个回答

3
以下代码块配置了一个Firefox Profile,使用Java绑定通过Selenium下载并保存PDF文件:
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.dir", "C:\\Utility\\Downloads");
profile.setPreference("browser.download.folderList",2);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/plain,application/octet-stream,application/pdf,application/x-pdf,application/vnd.pdf");
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.helperApps.neverAsk.openFile","text/plain,application/octet-stream,application/pdf,application/x-pdf,application/vnd.pdf");
profile.setPreference("browser.helperApps.alwaysAsk.force", false);
profile.setPreference("browser.download.manager.useWindow", false);
profile.setPreference("browser.download.manager.focusWhenStarting", false);
profile.setPreference("browser.helperApps.neverAsk.openFile", "");
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.download.manager.showAlertOnComplete", false);
profile.setPreference("browser.download.manager.closeWhenDone", true);
profile.setPreference("pdfjs.disabled", true);
System.setProperty("webdriver.firefox.bin", "D:\\FFF\\firefox.exe");
WebDriver driver = new FirefoxDriver(profile);

它不起作用,而且我也不确定为什么它会在弹出对话框之前弹出一个新的空白浏览器标签并立即关闭,这是否会引起任何问题? - Prasad_Joshi
不好意思,您能否获取“新的空白浏览器标签页”和“显示对话框”的快照?您要下载哪种类型的文件? - undetected Selenium
好的,我无法在打开之前截取空白标签的屏幕截图,因为它只会在一瞬间打开。这是一个 MIME 对话框的屏幕截图: http://imgur.com/a/iiVhh - Prasad_Joshi
请查看我的更新答案,如果可以的话,请告诉我,否则考虑分享URL。 - undetected Selenium
最初我没有考虑边缘情况,这是我的代码中的一个错误。现在已经考虑到了边缘情况 :) 谢谢 - undetected Selenium
第一个“browser.helperApps.neverAsk.openFile”设置似乎是不必要的。 - k-den

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接