使用Selenium进行屏幕截图

3

我正在尝试使用selenium对当前页面进行截屏。

我看到了一些代码示例,例如:

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("location"));

但是这仅适用于将驱动程序声明为 FirefoxDriver 的情况。

FirefoxDriver driver = new FirefoxDriver();

我的程序需要使用HtmlUnitDriver

HtmlUnitDriver driver = new HtmlUnitDriver();

因为我想要一个无头浏览器,就像FireFoxDriver打开火狐并执行所有操作一样。有没有办法可以使用HtmlUniteDriver截屏,或者有没有办法使用其他浏览器但不显示浏览器界面,以实现无头浏览?
2个回答

1

您可以做的一件事就是创建自己的扩展版本的HtmlUnitDriver,该版本实现了TakesScreenshot接口。

class ExtendedHtmlUnitDriver extends HtmlUnitDriver implements TakesScreenshot {
  @Override
  public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
    final String base64 = execute(DriverCommand.SCREENSHOT).getValue().toString();
    return target.convertFromBase64Png(base64);
  }
}

然后您可以像这样做:

HtmlUnitDriver driver = new ExtendedHtmlUnitDriver();
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("location"));

这段代码并不完整,但足以显示应该去哪里。


1
这是我第一次使用Selenium,还需要在代码中添加什么? - undefined

0

虽然我自己还没有机会尝试这段代码,但我找到了这个实现了拍摄屏幕截图接口的HtmlUnitDriver的实现:

https://groups.google.com/forum/#!msg/selenium-developers/PTR_j4xLVRM/k2yVq01Fa7oJ

为了对这段代码做一点补充,它允许你像使用其他WebDrivers(如FireFox或Chrome)一样调用take screenshot方法,然后将当前的HTML页面以及所有相关的CSS和图像转储到zip归档文件中。

以下是你在代码中如何调用它:

WebDriver driver = new ScreenCaptureHtmlUnitDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));

希望这能再多帮助一点!

2
通常情况下,仅提供链接的回答并不是非常有帮助的(http://meta.stackexchange.com/questions/65277/are-link-only-answers-poor-practice)。尝试在回答中添加更多的解释,以帮助提问者和未来查看该问题的人(以防链接失效)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接