以网页的截图在Java中[关闭](Take a screenshot of a web page i

2019-07-20 10:06发布

是否有一个免费的工具,可以读取指定网页,并采取它的屏幕截图?

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,它传递给飞碟之前使用像猫的工具把它清理干净。



文章来源: Take a screenshot of a web page in Java [closed]