我曾试图设计一种方法来获取在浏览器中运行的Java小程序的屏幕截图,但似乎无法使其正常工作。我成功地使用cutycapt
从"普通"网站上获得了良好的屏幕截图,但我很快发现它似乎依赖于qtwebkit
进行渲染,但它不支持java。我也尝试过IEcapt
,认为它会以某种方式继承系统上IE的Java渲染功能,但它不起作用。Flash似乎在IEcapt
中也不起作用,而且它没有启用插件的标志,所以我假设功能也不存在。
有人想过如何从Windows或Linux命令行将/index.jsp
之类的东西渲染到图像上吗?
Selenium网络驱动程序在这里可能很有用:
http://docs.seleniumhq.org/projects/webdriver/
它主要用于测试自动化,但可能会有所帮助。
例如,它可以这样使用:
import org.openqa.selenium.*;
WebDriver driver = new FirefoxDriver(); // create a Firefox webdriver instance
driver.get("http://www.google.com/"); // navigate to page
File screenshotFile = ((Screenshot)driver).getScreenshotAs(file); // capture screenshot
// and save to a file
// here you can trigger any necessary actions on the website:
Webelement element = driver.findElement(By.name("q")).sendKeys("xxxxx");
element.click();
new WebDriverWait(driver, 10)).until(ExpectedConditions.titleContains("xxxxx"));
// and capture a new screenshot once the content has changed
File xxxScreenshotFile = ((Screenshot)driver).getScreenshotAs(file);
您尝试过使用java.awt.Robot吗?
Rectangle rect = yourGragphicsConfiguration.getBounds();
BufferedImage image = new Robot().createScreenCapture(rect);
如果你知道你的小程序的位置,你可能可以用获得它
BufferedImage dest = image.getSubimage(appletX, appletY, appletHeight, appletWidth);
您可以截图Swing/AWT组件。
这可以通过两种方式实现。在这两种情况下,组件都必须可见。
无机器人使用:
BufferedImage image = new BufferedImage(component.getWidth(),
component.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics g = image.getGraphics();
component.paint(g);
与机器人一起使用:
在这种情况下,将制作该组件所在区域的屏幕截图。也就是说,如果组件与另一个应用程序窗口重叠,那么屏幕截图将包含另一个窗口的一个区域。
Point point = new Point(0, 0);
SwingUtilities.convertPointToScreen(point, component);
Rectangle region = component.getBounds();
region.x = point.x;
region.y = point.y;
BufferedImage image= new Robot().createScreenCapture(region);
此信息摘自文章:Java小程序开发过程中的常见问题