在 Java 中截取网页的屏幕截图 [已关闭]
2022-09-01 15:32:42
有没有一个免费的工具可以阅读给定的网页并截取屏幕截图?
我使用Selenium Webdriver使用VirtualFramebuffer和Firefox Binary获得了最好的结果。这是在 ubuntu 下测试的。你需要安装 xvfb 和 firefox
首先安装火狐和虚拟帧缓冲器:
aptitude install xvfb firefox
编译并运行此类,然后打开 /tmp/屏幕截图.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();
}
}
基于上述两个答案:
在Java中渲染HTML然后保存到图像中 - 存在一些基于Java的HTML渲染,所有这些都具有不同的缺点。最常见的是内置的那个。这很简单,只能呈现相当基本的HTML。据我所知,最吸引人的是飞碟项目。这可以呈现相当复杂的XHTML,但你必须转换HTML才能使用它(JTindy也许可以在这里提供帮助)。获取 Swing 组件并创建图像相当简单,只需传递 BufferedImage
的图形对象并将其传递给 Swing 组件绘制方法即可。然后用ImageIO将其剥离出来。
这样做的一大优点是渲染器将是无头的。缺点是它不会是一个完美的渲染,并且会缺少任何插件。
第二个选项要求您启动Web浏览器,确定它的位置,然后拍摄屏幕截图。或者,您可能还希望剥离所有Firefox / IE / Opera / etc菜单,只留下图像。要获得Web浏览器的尺寸,最简单的选择是全屏启动它。另一种选择是使用类似JDIC浏览器组件的东西,将其作为Java应用程序的一部分。然后,它将能够指定HTML在屏幕上的呈现位置,然后只需使用Robot创建该区域的屏幕截图即可。
这样做的最大优点是它将提供完美的渲染(对于给定的浏览器)。两个缺点是它需要本机代码(或至少使用本机组件),并且它不能是无外设¹。
1) 您可以使用虚拟帧缓冲区。但这是在Java之外。