当前位置:  开发笔记 > 编程语言 > 正文

用Java浏览网页截图

如何解决《用Java浏览网页截图》经验,为你挑选了3个好方法。

是否有免费工具可以读取给定的网页并截取它的截图?



1> Janning..:

我使用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();
    }
}



2> Michael Lloy..:

基于以上两个答案:

用Java渲染HTML然后保存到图像 - 存在一些基于Java的HTML渲染,所有这些都有不同的缺点.最常见的是内置的.这非常简单,只能呈现相当基本的HTML.我所知道的最有趣的是飞碟项目.这可以渲染相当复杂的XHTML,但您必须先转换HTML才能使用它(JTindy可以在这里提供帮助).获取Swing组件并创建图像非常简单,只需传递一个BufferedImages 图形对象并将其传递给Swing组件绘制方法即可.然后使用ImageIO进行扫描.
这方面的一大优势是渲染器将是无头的.缺点是它不是一个完美的渲染,它将缺乏任何插件.

第二个选项要求您启动Web浏览器,找出它的位置,然后进行屏幕截图.您也可以选择删除所有Firefox/IE/Opera/etc菜单,只留下图像.要获得Web浏览器的尺寸,最简单的选择是全屏启动.另一种选择是使用JDIC 浏览器组件之类的东西将其作为Java应用程序的一部分包含在内.然后,它将能够指定HTML在屏幕上呈现的位置,然后只需使用Robot创建该区域的屏幕截图.
这样做的最大优点是它可以提供完美的渲染(对于给定的浏览器).两个缺点是它需要本机代码(或至少使用本机组件)并且它不能无头¹.

1)您可以使用虚拟帧缓冲区.但那是在Java之外.



3> chrismarx..:

这不是Java,但是来到这里之后,我最终会使用它,所以我认为值得一提.使用PhantomJs,您可以运行无头版webkit,然后通过内置的mongoose网络服务器访问该功能,该网络服务器可以处理屏幕捕获请求,并在本地存储它们.您可以使用Java来发出请求,并且响应可以包含服务器上图像的URL,因此您也可以抓住它 -

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有