2013-08-01 78 views
1

我试图设计一种方式来获取在浏览器中运行的Java applet的屏幕截图,但似乎无法使其工作。我管理成功使用cutycapt从“正常”网站获取截图,但很快我发现qtwebkit它似乎依赖于渲染不支持Java。我也试过IEcapt认为它会以某种方式继承系统上IE的Java渲染能力,但它不起作用。 Flash在IEcapt中似乎也没有工作,并且它没有启用插件的标志,所以我认为功能也不存在。以编程方式获取Java applet的屏幕截图

有没有人有任何想法,如何可以像一个/index.jsp像一个Windows或Linux命令行的图像?

回答

0

您是否尝试过使用java.awt.Robot?

Rectangle rect = yourGragphicsConfiguration.getBounds(); 
    BufferedImage image = new Robot().createScreenCapture(rect); 

如果你知道你的小应用程序的位置,你也许能

BufferedImage dest = image.getSubimage(appletX, appletY, appletHeight, appletWidth); 
+0

对不起,我应该规定以任何方式修改应用程序是不是一种选择,我找软件运行的Java小程序,并给我:

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); 

该信息是从文章取图形输出(我不打算自己构建软件) – pzkpfw

3

硒的webdriver可能会在这里很有用得到它:

http://docs.seleniumhq.org/projects/webdriver/

它用于p rimarily为测试自动化,但它可能会有所帮助。

它可以被使用,例如,像这样:

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); 
+0

我对于不同的Selenium产品的范围有些困惑。这只是WebDriver?它可以在Linux服务器上的CLI上运行吗?你能好好详细阐述一下你将如何设置它?我很欣赏这个指针,但是因为我对Selenium一无所知,所以我无法确定这是否会成功。 – pzkpfw

+0

Selenium Webdriver是一种较新的方法。还有之前创建的Selenium Remote Control,但现在已被视为弃用。为了在Web上使用Webdriver,您应该下载并运行Selenium Standalone Server并导入该库。你可以在这里找到很多有用的文档:http://www.seleniumhq.org/。您可以在Linux中从控制台运行webdriver。 – OlgaMaciaszek

-1

你可以采取的Swing/AWT组件的屏幕截图。

这可以通过2种方式完成。在这两种情况下,组件都必须可见。

没有机器人使用:

BufferedImage image = new BufferedImage(component.getWidth(), 
component.getHeight(), BufferedImage.TYPE_INT_ARGB); 
    Graphics g = image.getGraphics(); 
    component.paint(g); 

随着机器人使用:

在这种情况下,其中该组件位于将进行区域的屏幕截图。也就是说,如果组件与另一个应用程序窗口重叠,那么屏幕截图将包含另一个窗口的区域。 Frequently Asked Questions during Java applet development

相关问题