如何使用 selenium java 禁用 Firefox 浏览器中的打印预览

问题描述 投票:0回答:1

我正在尝试使用 selenium java 取消 Firefox 浏览器的打印对话框,但无法找到此问题的答案。 我研究了 Firefox 的功能,没有找到任何与 打印预览 相关的内容。 我也尝试过将 SendKeys 与窗口句柄一起使用,但它失败了并且不起作用。我没有主意了

任何帮助将不胜感激。

firefox print dialog

java selenium-webdriver selenium-firefoxdriver
1个回答
0
投票

我可以想到两种方法来实现这一目标。

  1. 使用 print.always_print_silent 标志
        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 页面来完成该任务。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.