是否有一个免费的工具,可以读取指定网页,并采取它的屏幕截图?
Answer 1:
要建立两个以上的答案:
呈现在Java中,然后保存为图片的HTML代码 - 一些基于Java HTML渲染存在,都具有不同的套缺点。 最常见的是一个内置的 。 这是很简单的,只能使相当基本的HTML。 最intresting我所知道的是飞碟项目 。 这可以使相当复杂的XHTML,但你将不得不转换HTML之前,你可以用它( JTindy也许能帮助这里)。 以Swing组件和创建图像是相当简单,您只需通过一个BufferedImage
小号图形对象并将其传递到Swing组件漆方法。 然后,图示了这一点与ImageIO的 。
一个很大的优势,这将是该渲染器将无头。 缺点是,它不会是一个完美的呈现,它会没有任何插件。
第二种选择要求您启动Web浏览器,找出它在哪里,然后采取的屏幕截图。 可选您也不妨去掉所有的火狐/ IE /歌剧/等菜单,让你只图像。 为了让Web浏览器的尺寸是最简单的办法是启动全屏幕。 另一种选择是使用像JDICs 浏览器组件,包括它的Java应用程序的一部分。 然后,将能够指定的HTML被呈现在屏幕上,然后简单地使用机器人来创建面积的屏幕截图。
最大的优势是,它会给出一个完美呈现(对于给定的浏览器)。 的两个缺点是,它需要的本机代码(或至少使用天然成分)和它不可能是headless¹。
1)你可以使用一个虚拟帧缓冲器。 但是,这是Java的外面。
Answer 2:
我不得不使用VirtualFramebuffer和Firefox二进制与硒的webdriver最好的结果。 这是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();
}
}
Answer 3:
这不是Java的,但来到这里后,这是我结束了使用,所以我认为这是值得一提。 随着PhantomJs可以运行的WebKit的无头版本,然后通过访问功能的内置Web服务器猫鼬,它可以处理screencaptures请求,并将它们存储在本地。 您可以使用Java到发出请求,响应可以链接到服务器上的图像,所以你可以抢too-
Answer 4:
使用Selenium-RC
Answer 5:
您可以在awt.Robot使用createScreenCapture方法。 这种方法允许你指定要捕获的屏幕部分。 所以,你仍然需要确定包含您想要捕捉的网页的窗口的坐标。
Answer 6:
为了使纯Java的HTML,你可以看看飞碟。
http://code.google.com/p/flying-saucer//
它使得XML / XHTML / CSS 2.1
我相信它仅适用于有效的XML或XHTML,所以如果你需要渲染非有效的HTML,它传递给飞碟之前使用像猫的工具把它清理干净。