我的情况就像单击一个按钮时会打开一个基于窗口的PDF文件:
我正在使用 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来处理它
答案 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,然后您可以实现一种下载文件并解析下载文件的方法。
希望这对您有所帮助:)