Программно получить скриншот Java-апплета

Я пытался придумать способ сделать скриншот Java-апплета, работающего в браузере, но я не могу заставить его работать. Мне удалось успешно использовать cutycapt чтобы получить скриншоты нормально с "нормальных" сайтов, но вскоре я узнал, что qtwebkit который, кажется, полагается для рендеринга, не поддерживает Java. Я тоже пробовал IEcapt думая, что это каким-то образом унаследует возможности рендеринга Java IE в системе, но это не работает. Вспышка тоже не работает IEcaptи у него нет флагов для включения плагинов, так что я предполагаю, что функциональности там тоже нет.

Есть ли у кого-нибудь мысли о том, как вы могли бы сделать что-то вроде /index.jsp к образу из командной строки Windows или Linux?

3 ответа

Selenium Webdriver может быть полезен здесь:

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-апплета.

Другие вопросы по тегам