【问题标题】:Custom browser preferences for file download for PDF file用于 PDF 文件下载的自定义浏览器首选项
【发布时间】:2018-04-04 16:47:57
【问题描述】:

我正在尝试使用我在 Stackoverflow 上的其他主题中找到的代码,以不询问用户下载 PDF 文件应采取的操作。

我使用的代码是:

 FirefoxProfile specialProfile = new FirefoxProfile();
 specialProfile.SetPreference("browser.helperApps.alwaysAsk.force", false);
 specialProfile.SetPreference("browser.download.manager.showWhenStarting", false);
 specialProfile.SetPreference("browser.download.folderList", 2);
 specialProfile.SetPreference("browser.download.dir", Setup.DownloadContractPath);            
 specialProfile.SetPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
 specialProfile.SetPreference("browser.download.useDownloadDir", true);

 specialProfile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");

 return new FirefoxDriver(specialProfile);

但它似乎不适用于我的情况。我正在下载的文件类型是:PDF 即使我使用上面的代码,我也会得到以下屏幕:

有谁知道我做错了什么?

【问题讨论】:

  • 如果您在 Windows 上工作,另一种解决方案是使用 sendkeys 并点击 tab-tab 和 以单击 OK 按钮
  • 呸,你为什么还要下载东西?你真的用它做了什么吗?
  • 您好,实际上应用程序中有另一个进程在完成文件下载后已启动。这就是为什么我需要得到它。

标签: c# selenium webdriver selenium-webdriver


【解决方案1】:

您使用的是哪个 Firefox 和 Selenium 版本?

我使用的是Firefox 20.0,默认行为是预览pdf文件而不是下载,所以我需要添加specialProfile.SetPreference("pdfjs.disabled", true);

除此之外,您的代码非常适合我。 (注意我使用的是 Directory.GetCurrentDirectory() 而不是你的 Setup.DownloadContractPath)。尝试使用sample.pdf 并检查首选项是否实际上在您的 webdriver 打开的 Firefox 的 about:config 页面中。

这里有更详细的文章:Download PDF files automatically in Firefox using Selenium WebDriver

FirefoxProfile specialProfile = new FirefoxProfile();
specialProfile.SetPreference("browser.helperApps.alwaysAsk.force", false);
specialProfile.SetPreference("browser.download.manager.showWhenStarting", false);
specialProfile.SetPreference("browser.download.folderList", 2);
specialProfile.SetPreference("browser.download.dir", Directory.GetCurrentDirectory()); // my downloading dir
specialProfile.SetPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
specialProfile.SetPreference("browser.download.useDownloadDir", true);
specialProfile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf");

specialProfile.SetPreference("pdfjs.disabled", true); // for my Firefox 20.0
return new FirefoxDriver(specialProfile);

【讨论】:

  • 很高兴知道这一点。那么你知道你的代码不工作的原因吗?
  • 嗨,缺少的部分是:specialProfile.SetPreference("pdfjs.disabled", true);但我还是不知道这部分在做什么?和想法?
  • Firefox 有内置的 pdf 解析库来查看 pdf 文件,它可以在没有这些行的情况下进行控制
  • 它可以工作,直到您将 添加到您的 mimeTypes.rdf 文件中配置文件根。因此,如果它停止工作 - 删除这些行(或者更好的是整个文件,因为您可以使用 browser.helperApps.neverAsk.saveToDisk 进行设置)
【解决方案2】:

您现在应该传递选项:

Dim fxOpt As New FirefoxOptions()

fxOpt.Profile.SetPreference("browser.helperApps.alwaysAsk.force", False)
fxOpt.Profile.SetPreference("browser.download.manager.showWhenStarting", False)
fxOpt.Profile.SetPreference("browser.download.folderList", 2)
fxOpt.Profile.SetPreference("browser.download.dir", Directory.GetCurrentDirectory()); // my downloading dir
fxOpt.Profile.SetPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", False)
fxOpt.Profile.SetPreference("browser.download.useDownloadDir", True)
fxOpt.Profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
fxOpt.Profile.SetPreference("pdfjs.disabled", True)

WebDrv = New Firefox.FirefoxDriver(fxOpt)

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2016-08-24
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多