Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java截图显示一个网页_Java_Screenshot - Fatal编程技术网

用Java截图显示一个网页

用Java截图显示一个网页,java,screenshot,Java,Screenshot,有没有免费的工具可以读取给定的网页并截图?使用selenium rc您可以在awt.Robot中使用CreateScreateScreenCapture方法。此方法允许您指定要捕获的屏幕部分。因此,您仍然需要确定包含要捕获的网页的窗口的坐标。要用纯java呈现HTML,您可以看一下飞碟 它呈现XML/XHTML/CSS 2.1 我相信它只适用于有效的XML或XHTML,因此如果您需要呈现无效的HTML,请在将其传递给飞碟之前使用neko之类的工具进行清理。以上述两个答案为基础: 在Java中呈

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

使用selenium rc

您可以在awt.Robot中使用CreateScreateScreenCapture方法。此方法允许您指定要捕获的屏幕部分。因此,您仍然需要确定包含要捕获的网页的窗口的坐标。

要用纯java呈现HTML,您可以看一下飞碟

它呈现XML/XHTML/CSS 2.1


我相信它只适用于有效的XML或XHTML,因此如果您需要呈现无效的HTML,请在将其传递给飞碟之前使用neko之类的工具进行清理。

以上述两个答案为基础:

在Java中呈现HTML,然后保存到图像中-存在一些基于Java的HTML呈现,所有这些呈现都有不同的缺点。最常见的是一个。这非常简单,只能呈现相当基本的HTML。我所知道的最有趣的是。这可能会呈现相当复杂的XHTML,但您必须先转换HTML,然后才能使用它(这里可能有帮助)。获取Swing组件并创建图像相当简单,只需传递一个s对象并将其传递给Swing components方法。然后用……把它吐出来。
这样做的一大优势是渲染器将是无头的。缺点是,它不是一个完美的渲染,并且缺少任何插件

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


1) 您可以使用虚拟帧缓冲区。但这不属于Java。

我使用VirtualFramebuffer和Firefox二进制文件使用SeleniumWebDriver获得了最佳效果。 这是在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();
    }
}

它不是Java,但来到这里之后,我最终使用了它,所以我认为值得一提。使用,您可以运行无头版本的webkit,然后通过内置的mongoose Web服务器访问该功能,该服务器可以处理屏幕截图请求,并将其存储在本地。您可以使用Java发出请求,响应可以有服务器上图像的url,因此您也可以获取该url-

您是要启动一些浏览器,打开其中的页面,然后捕获网站,还是希望网站通过Java代码呈现,然后写入图像?Eclipse中有一个浏览器。你有使用它的经验吗?除了作为一个用户,我没有(SWTAPI让我害怕)。但有一点很好,那就是它可能比默认的内置一个更好,并且比Flying discer.JTidy更支持HTML。您也可以尝试HtmlUnit(.sourceforge.net)+1对于JDIC浏览器参考,这是一个非常雄心勃勃的项目,需要更多的支持。不再有效。我可以确认这一点(mac OS)是的,但使用/usr/X11/bin/xvfb@janning是否可以使用java获取当前窗口的url…bcoz我的网页有多个选项卡,每次单击每个选项卡时,相应的url应作为url传递field@chopu我不知道你的意思,请提出有关StackOverflow的新问题。您还需要: