我正在尝试使用 selenium java 取消 Firefox 浏览器的打印对话框,但无法找到此问题的答案。 我研究了 Firefox 的功能,没有找到任何与 打印预览 相关的内容。 我也尝试过将 SendKeys 与窗口句柄一起使用,但它失败了并且不起作用。我没有主意了
任何帮助将不胜感激。
我可以想到两种方法来实现这一目标。
WebDriverManager.firefoxdriver().setup();
FirefoxOptions options = new FirefoxOptions();
options.addPreference("print.always_print_silent", true);
WebDriver driver = new FirefoxDriver(options);
driver.get("http://localhost:3000");
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("window.print();");
此实现的问题是,如果您想另存为文件,则会出现保存文件对话框,您需要额外的配置来绕过它。我还没有完全测试这个场景。但如果您要打印到外部设备,那么应该没问题。
另一种方法是使用 selenium 中的 TakeScreenshot。
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
首先获取宽度和高度
JavascriptExecutor js = (JavascriptExecutor) driver;
int totalHeight = ((Number) js.executeScript("return document.body.scrollHeight")).intValue();
int viewportHeight = ((Number) js.executeScript("return window.innerHeight")).intValue();
使用 javascript 继续滚动并继续拍摄快照。
int scrollPosition = 0;
List<File> screenshots = new ArrayList<>();
while (scrollPosition < totalHeight) {
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
screenshots.add(screenshot);
scrollPosition += viewportHeight;
js.executeScript("window.scrollBy(0, arguments[0]);", viewportHeight);
Thread.sleep(1000); // sleep to handle load time
}
这样您将获得 PNG 形式的快照,然后您可以使用任何 PDF 库(例如 PDFBox)将图像添加到 pdf 并将其另存为文件。
您可以参考Java:使用 PDFBox 1 库从图像创建 PDF 页面来完成该任务。