java - selenium + java - 如何下载 pdf 并用不同的名称保存?

标签 java selenium download google-chrome-headless

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

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

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

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

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

我进行了大量搜索,找到了几篇文章,这些文章让我对问题的部分内容有了深入的了解,但无法形成一个可行的解决方案。

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

谁能指出我的解决方案?

提前致谢

最佳答案

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

必需的 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 --> 在启动相应链接或 URI 时下载 pdf .

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

关于java - selenium + java - 如何下载 pdf 并用不同的名称保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69251242/

相关文章:

java - 如何将锁屏壁纸设置为动态壁纸

java - 使用 Selenium WebDriver 从 Javascript 源中提取变量

c++ - 在 Qt 桌面应用程序上运行 Selenium

php - 生成的 CSV 下载为空但有内容

java - 如何让扫描仪搜索 token ,然后返回其后的 token ?

java - 每次我想运行时,我都必须(项目>清理)。怎么不呢?

java - Spring Quartz-Scheduler 不断发出请求不止一次

java - 如何在 Selenium WebDriver 中选择日期选择器

Delphi 文件下载器组件

python - 从 python 模块返回文件