【问题标题】:selenium + java - how to download a pdf and save with a different name?selenium + java - 如何下载pdf并以不同的名称保存?
【发布时间】:2021-11-13 23:22:22
【问题描述】:

作为现有 selenium 测试包工作的一部分,我被要求删除 Firefox 的实例化以下载服务器生成的 PDF 文档 - 身份验证问题导致代理配置会话错误,导致无法下载文档。

当文档在服务器中生成时,可以通过包含 UUID 的 URL 访问它。此 URL 已传递给新的 Firefox 实例,并且可以下载该文档。

这个 selenium 包是按照大约 10 年前软件开发的最佳实践组合在一起的。虽然它有效,但在大多数情况下,它的性能很差。

我可以使用服务 URL 和 UUID 作为路径的一部分访问服务器上生成的文档,因为这是文档生成过程的一部分。在当前工作流程中,有一个“生成文档”按钮,运行包单击该按钮。

生成此文档后,我需要将其下载到特定文件夹并重命名,以证明该过程已圆满完成。

我进行了很多搜索,发现一些文章让我深入了解了问题的某些部分,但无法找到可行的解决方案。

我可以在无头模式下启动 chrome 驱动程序,但还没有弄清楚如何下载文档。由于浏览器窗口显示文档本身,因此页面上没有可点击的下载按钮。

任何人都可以在这里指出一个解决方案吗?

提前致谢,

【问题讨论】:

  • 如果可能的话,我做过类似的事情,您能否提供更多详细信息。要重现这一点,我可以在本地做类似的事情吗?就像,我的机器里有一个 PDF,我在 chrome 的帮助下打开,然后我可以看到下载按钮
  • @NandanA,感谢您的评论。事实上,当我在网络浏览器上打开 PDF 时,我可以看到下载按钮。我的意思是应用程序上没有文档的下载按钮或链接。为混乱道歉。
  • 我会发布一个答案。
  • 是否可以通过 wget 的某些实现来检索 pdf 文档?
  • 发表了答案,如果有帮助请告诉我。

标签: java selenium download google-chrome-headless


【解决方案1】:

目前在 chrome 中打开 pdf 时,我们可以看到下载选项,但通过 selenium 我们无法对该下载按钮执行任何操作。在这里,我们的目标是将 pdf 下载到所需的位置,因此在启动驱动程序之前,我们需要 disablepdf 插件。请看下面的代码,

必需的 ChromOptions:

   ChromeOptions options = new ChromeOptions();
   HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
       chromeOptionsMap.put("plugins.plugins_disabled", new String[] { "Chrome PDF Viewer" });
       chromeOptionsMap.put("plugins.always_open_pdf_externally", true);
       chromeOptionsMap.put("download.default_directory", "C:\\Users\\Downloads\\test\\");
       options.setExperimentalOption("prefs", chromeOptionsMap);
       options.addArguments("--headless");
  

访问 PDF:

driver = new ChromeDriver(options);
driver.manage().deleteAllCookies();
driver.get("C:\\Users\\Downloads\\Bill.pdf");

说明:

plugins.plugins_disabled --> 禁止在 chrome 中查看 pdf

plugins.always_open_pdf_externally --> 在启动相应链接时下载pdfURI

download.default_directory --> 可以更改默认下载位置。

【讨论】:

  • 这看起来不错!我现在就试试看!下载的文件和源文件同名吧?
  • 是的。如果你愿意,你可以修改,但这需要更多的代码。请务必在此处更改路径chromeOptionsMap.put("download.default_directory", "C:\\Users\\Downloads\\test\\");
【解决方案2】:

没有办法使用普通的 Selenium 来做到这一点,但请尝试使用 AutoIT:

https://www.lambdatest.com/blog/how-to-download-upload-files-using-selenium-with-java/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多