【问题标题】:How to handle Window Based PDF如何处理基于窗口的 PDF
【发布时间】:2018-07-13 07:57:16
【问题描述】:

我有这样的场景,比如单击一个按钮会打开一个基于窗口的 PDF 文件:

我正在使用 Gecko 驱动程序版本 -21.0 Firefox 版本 -61.0.1 Selenium Standalone Server -3.13

我无法切换到基于窗口的 PDF 文件出现错误:

java.net.SocketException:软件导致连接中止:recv 在结果中失败

driver.getWindowHandles()”方法出现上述错误

它适用于 Chrome 和 IE,但是当我使用 Gecko 驱动程序版本 - 20.1 时,我能够切换基于窗口的 PDF。

谁能帮我解决这个问题?

我想用最新的壁虎驱动 -21.0 来处理它

【问题讨论】:

  • 进入PDF页面的目的是什么?
  • 这里的目的是在单击按钮后 pdf 文件应该自动下载或者应该打开但是如果我使用 gecko 驱动程序 20.1,我们需要根据下载或窗口来处理它,我是可以切换点击按钮后只需确认pdf即将到来

标签: selenium selenium-webdriver


【解决方案1】:

不幸的是,通过切换标签对pdf进行操作是很困难的。最好的方法是下载 pdf 并使用一些 java 库或 pdf-parser 对下载的文件执行操作。

pdf 的这种常见行为是由于启用了 pdf js 的功能。在 Firefox 配置文件中禁用它可能会解决您的问题

更新您的 Firefox 配置文件可解决此问题。

       FirefoxProfile profile = new FirefoxProfile();

       profile.setPreference( "pdfjs.disabled", true );
       profile.setPreference("pdfjs.disabled", true );
       profile.setPreference("pdfjs.enabledCache.state", false );
       profile.setPreference("pdfjs.enabledCache.state", false);
       profile.setPreference("pdfjs.migrationVersion", 2);

       profile.setPreference("pdfjs.previousHandler.alwaysAskBeforeHandling", true);
       profile.setPreference("pdfjs.previousHandler.preferredAction", 4);

       FirefoxOptions options = new FirefoxOptions().setProfile(profile);
       WebDriver driver = new FirefoxDriver(options);

这会停止在新窗口中打开 pdf,您还可以实现一种方法来下载文件并解析下载的文件。

希望对你有帮助:)

【讨论】:

  • 感谢 Bhargav,但是当我使用带有最新版本 fire fox 61.0.1 的 gecko 驱动程序 21.0 进行窗口处理时,我得到“java.net.SocketException:软件导致连接中止:recv failed”我调试代码我得到了 driver.getWindowhandle() 语句的上述异常你能帮我吗
  • 这段代码在 ff 58 中运行良好,我在 ff 61 中进行了测试,发现我们需要更多的首选项才能使其正常工作。我已经更新了早期的解决方案。那应该会自动下载 pdf 文件,尝试一下并告诉我
猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2017-09-09
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多