如何处理基于窗口的PDF

时间:2018-07-13 07:57:17

标签: selenium selenium-webdriver

我的情况就像单击一个按钮时会打开一个基于窗口的PDF文件:

enter image description here

我正在使用 Gecko驱动程序版本-21.0 Firefox版本-61.0.1 Selenium独立服务器-3.13

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

  

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

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

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

有人可以帮我吗?

我想通过使用最新的gecko驱动程序-21.0来处理它

1 个答案:

答案 0 :(得分: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,然后您可以实现一种下载文件并解析下载文件的方法。

希望这对您有所帮助:)