是否有可以阅读指定网页并截取屏幕截图的免费工具?
答案 0 :(得分:20)
Selenium Webdriver使用VirtualFramebuffer和Firefox Binary获得了最佳结果。 这是在ubuntu下测试的。你需要安装xvfb和firefox
首先安装firefox和虚拟帧缓冲区:
aptitude install xvfb firefox
编译并运行此类,之后打开/tmp/screenshot.png
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
public class CaptureScreenshotTest
{
private static int DISPLAY_NUMBER = 99;
private static String XVFB = "/usr/bin/Xvfb";
private static String XVFB_COMMAND = XVFB + " :" + DISPLAY_NUMBER;
private static String URL = "http://www.google.com/";
private static String RESULT_FILENAME = "/tmp/screenshot.png";
public static void main ( String[] args ) throws IOException
{
Process p = Runtime.getRuntime().exec(XVFB_COMMAND);
FirefoxBinary firefox = new FirefoxBinary();
firefox.setEnvironmentProperty("DISPLAY", ":" + DISPLAY_NUMBER);
WebDriver driver = new FirefoxDriver(firefox, null);
driver.get(URL);
File scrFile = ( (TakesScreenshot) driver ).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(RESULT_FILENAME));
driver.close();
p.destroy();
}
}
答案 1 :(得分:15)
建立上述两个答案:
使用Java渲染HTML然后保存到图像 - 存在一些基于Java的HTML渲染,它们都有不同的缺点。最常见的是一个built in。这非常简单,只能呈现相当基本的HTML。我所知道的最有趣的是The Flying Saucer Project。这可以渲染相当复杂的XHTML,但您必须先转换HTML才能使用它(JTindy可以在这里提供帮助)。使用Swing组件并创建图像非常简单,只需传递BufferedImage
s graphics对象并将其传递给Swing组件paint方法即可。然后用ImageIO向外突出。
这方面的一大优势是渲染器将是无头的。缺点是它不是一个完美的渲染,它将缺少任何插件。
第二个选项要求您启动Web浏览器,找出它的位置,然后进行屏幕截图。您也可以选择删除所有Firefox / IE / Opera / etc菜单,只留下图像。要获得Web浏览器的尺寸,最简单的选择是全屏启动。另一种选择是使用类似JDIC browser组件的东西将其作为Java应用程序的一部分包含在内。然后,它可以指定HTML在屏幕上呈现的位置,然后只需使用Robot创建该区域的屏幕截图。
这样做的最大优点是它可以提供完美的渲染(对于给定的浏览器)。两个缺点是它需要本机代码(或者至少使用本机组件)并且它不能无头¹。
1)您可以使用虚拟帧缓冲区。但那不在Java之外。
答案 2 :(得分:6)
这不是Java,但来到这里之后,这是我最终使用的,所以我认为值得一提。使用PhantomJs,您可以运行无头版webkit,然后通过内置的mongoose网络服务器访问该功能,该网络服务器可以处理对screencaptures的请求,并将其存储在本地。您可以使用Java来发出请求,并且响应可以包含服务器上图像的URL,因此您也可以抓住它 -
答案 3 :(得分:2)
使用selenium-rc
答案 4 :(得分:2)
您可以在awt.Robot中使用createScreenCapture方法。此方法允许您指定要捕获的屏幕部分。因此,您仍然需要确定包含要捕获的网页的窗口的坐标。
答案 5 :(得分:1)
要在纯Java中呈现HTML,您可以查看Flying Saucer。
http://code.google.com/p/flying-saucer//
呈现XML / XHTML / CSS 2.1
我相信它只适用于有效的XML或XHTML,因此如果您需要渲染无效的HTML,请使用像neko这样的工具将其清理干净,然后再将其传递给飞碟。