Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 如何处理基于窗口的PDF_Selenium_Selenium Webdriver - Fatal编程技术网

Selenium 如何处理基于窗口的PDF

Selenium 如何处理基于窗口的PDF,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我遇到过这样的场景:单击一个按钮打开一个基于窗口的PDF文件: 我正在使用Gecko驱动程序版本-21.0 Firefox版本-61.0.1 Selenium单机版服务器-3.13 我无法切换到基于窗口的PDF文件获取错误: java.net.SocketException:软件导致连接中止:结果中recv失败 上述错误来自“驱动程序.getWindowHandles()”方法 它适用于Chrome和IE,但当我使用Gecko驱动程序版本-20.1时,我能够切换基于窗口的PDF 有人能帮我吗

我遇到过这样的场景:单击一个按钮打开一个基于窗口的PDF文件:

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

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

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

上述错误来自“驱动程序.getWindowHandles()”方法

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

有人能帮我吗


我想通过使用最新的gecko驱动程序-21.0来处理它。不幸的是,通过切换选项卡很难在pdf上执行操作。最好的方法是下载pdf并使用一些java库或pdf解析器对下载的文件执行操作

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,并且您可以实现一种方法来下载文件并解析下载的文件


希望这对您有所帮助:)

如果继续浏览PDF页面,目的是什么?单击按钮后,PDF文件应自动下载或打开,但如果使用gecko driver 20.1,我们需要处理它,或者下载,或者基于窗口,单击按钮Hanks Bhargav后,我可以切换到只确认pdf是否出现,但在使用gecko driver 21.0和最新版本fire fox 61.0.1进行窗口处理时,我得到了“java.net.SocketException:软件导致的连接中止:recv失败”当我调试代码时,我得到了驱动程序的上述异常。getWindowhandle()语句,你能让我帮助一下吗?这段代码在ff 58中运行良好,我在ff 61中进行了测试,并注意到我们需要更多的首选项才能使其正常工作。我已经更新了以前的解决方案。那应该会自动下载pdf文件,试试看,让我知道