Auto download PDF in Firefox

2019-01-22 23:40发布

I want Firefox to directly download the PDF files instead of showing them in browser. I used following settings

FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("browser.download.folderList", 2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
firefoxProfile.setPreference("browser.download.dir", "c:\\tmp");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
WebDriver driver = new FirefoxDriver(firefoxProfile);
// Its just a sample URL 
driver.get("http://www.energy.umich.edu/sites/default/files/pdf-sample.pdf");

On about:config page I can see that this setting are successfully reflected also the response type is application/pdf.

enter image description here

When Webdriver launches Firefox I can see following option.

enter image description here

It should be "Save File".

Still Firefox is showing PDF in browser. I am using Firefox 29.0.1, does the preference values have changed?

6条回答
老娘就宠你
2楼-- · 2019-01-23 00:01

This works for me:

    WebDriver driver;

    FirefoxProfile fxProfile = new FirefoxProfile();
    fxProfile.setPreference("browser.download.folderList", 2);
    fxProfile.setPreference("browser.download.manager.showWhenStarting", false);
    fxProfile.setPreference("browser.download.dir",System.getProperty("java.io.tmpdir"));
    fxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");

    //You miss this line
    fxProfile.setPreference("browser.helperApps.alwaysAsk.force", false);

    driver = new FirefoxDriver(firefoxProfile);

Give a try.

Hope helps!

查看更多
Viruses.
3楼-- · 2019-01-23 00:06

For Firefox Quantum 57.0 64-bit, Selenium 3.8.1, the following solution works.

FirefoxProfile ffprofile = new FirefoxProfile();        

// Required if you want to download other than the default location
ffprofile.setPreference("browser.download.folderList", 2);
// Specify your own location
ffprofile.setPreference("browser.download.dir", "C:\\TestAutomationDataSheets\\Files_To_Download\\");
ffprofile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
ffprofile.setPreference("pdfjs.enabledCache.state", false);

DesiredCapabilities ffcapabilities = DesiredCapabilities.firefox();
ffcapabilities.setCapability(FirefoxDriver.PROFILE, ffprofile);

WebDriver driver = new FirefoxDriver(ffcapabilities);
查看更多
做自己的国王
4楼-- · 2019-01-23 00:09

It doesn't make sense to me that your screenshot shows Firefox will preview pdf files, but your Firefox still pops up "Save as" dialog.

Anyway, in order to make Firefox saving pdf files to a pre-defined folder as the default behaviour, you might want to try the following code, where setting pdfjs.disabled to true will prevent Firefox previewing the files.

Also, please ensure you don't have any third party Firefox PDF viewing plugins installed. If you have Adobe Reader installed on your computer, then it sets Acrobat as the PDF viewer inside Firefox. Similarly, I used to have Sumatra PDF Firefox plugin on my computer, it overrides Firefox settings to preview PDFs no matter what's in about:config.

FirefoxProfile firefoxProfile = new FirefoxProfile();

firefoxProfile.setPreference("browser.download.folderList", 2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
firefoxProfile.setPreference("browser.download.dir", "c:\\tmp");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");

firefoxProfile.setPreference("pdfjs.disabled", true);

// Use this to disable Acrobat plugin for previewing PDFs in Firefox (if you have Adobe reader installed on your computer)
firefoxProfile.setPreference("plugin.scan.Acrobat", "99.0");
firefoxProfile.setPreference("plugin.scan.plid.all", false);

WebDriver driver = new FirefoxDriver(firefoxProfile);

// Its just a sample URL 
driver.get("http://www.energy.umich.edu/sites/default/files/pdf-sample.pdf");

Further reading:

查看更多
趁早两清
5楼-- · 2019-01-23 00:14

You can disable plugin while setting preference. This works for me

profile = webdriver.FirefoxProfile()

profile.set_preference("browser.download.folderList",2)
profile.set_preference("browser.helperApps.alwaysAsk.force", False)
profile.set_preference("browser.download.manager.showWhenStarting",False)
profile.set_preference("browser.download.dir", os.getcwd())

//below line was missing in yours

profile.set_preference("plugin.disable_full_page_plugin_for_types", "application/pdf")
profile.set_preference("pdfjs.disabled", True)
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")  
driver = webdriver.Firefox(firefox_profile=profile)

Hope this helps.

查看更多
做个烂人
6楼-- · 2019-01-23 00:23

The settings given by @Yi Zeng is perfectly fine but that doesnt work out. As after opening the Firebfox brower the preferences not getting applied due to one bug in selenium version. So if you are facing the same issue as mentioned here https://github.com/seleniumhq/selenium/issues/3498 then you need to do the work around like this to apply the preferences set by the code:

    DesiredCapabilities dc = DesiredCapabilities.firefox();
    dc = DesiredCapabilities.firefox();
    dc.setCapability(FirefoxDriver.PROFILE, firefoxProfile);
查看更多
戒情不戒烟
7楼-- · 2019-01-23 00:23

for me just these two worked.

firefoxProfile.setPreference("pdfjs.disabled", true);   


firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
driver = new FirefoxDriver(firefoxProfile);
查看更多
登录 后发表回答