27

特定のWebページを読み取ってスクリーンショットを撮ることができる無料のツールはありますか?

4

6 に答える 6

20

VirtualFramebufferとFirefoxBinaryを使用した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();
    }
}
于 2011-09-28T12:44:53.213 に答える
17

上記の2つの答えに基づいて構築するには:

JavaでHTMLをレンダリングしてから画像に保存する-JavaベースのHTMLレンダリングがいくつか存在しますが、すべて異なる欠点があります。最も一般的なのは、組み込みのものです。これは非常に単純で、かなり基本的なHTMLしかレンダリングできません。私が知っている中で最も興味深いのは、フライングソーサープロジェクトです。これにより、かなり複雑なXHTMLがレンダリングされる可能性がありますが、使用する前にHTMLを変換する必要があります(JTindyがここで役立つ場合があります)。Swingコンポーネントを取得して画像を作成するのは非常に簡単です。グラフィックスBufferedImageオブジェクトを渡して、それをSwingコンポーネントのpaintメソッドに渡すだけです。次に、 ImageIOでそれをスプラットします。
これの大きな利点は、レンダラーがヘッドレスになることです。欠点は、完全なレンダリングではなく、プラグインがないことです。

2番目のオプションでは、Webブラウザーを起動し、それがどこにあるかを調べてから、スクリーンショットを撮る必要があります。オプションで、Firefox / IE / Opera / etcのすべてのメニューを削除して、画像だけを残すこともできます。Webブラウザーのサイズを取得するには、フルスクリーンで起動するのが最も簡単なオプションです。もう1つのオプションは、JDICブラウザコンポーネントのようなものを使用して、Javaアプリケーションの一部として含めることです。次に、HTMLが画面上のどこにレンダリングされているかを指定し、Robotを使用してその領域のスクリーンショットを作成することができます。
これの大きな利点は、(特定のブラウザに対して)完璧なレンダリングが得られることです。2つの欠点は、ネイティブコードが必要になること(または少なくともネイティブコンポーネントを使用すること)と、ヘッドレスではないことです¹。

1)仮想フレームバッファを使用できます。しかし、それはJavaの外です。

于 2009-10-01T14:19:00.327 に答える
6

Javaではありませんが、ここに来てから使ってみたので、言及する価値があると思います。PhantomJを使用すると、ヘッドレスバージョンのWebkitを実行し、組み込みのマングースWebサーバーを介して機能にアクセスできます。このWebサーバーは、スクリーンキャプチャの要求を処理し、ローカルに保存できます。Javaを使用してリクエストを行うことができ、レスポンスにはサーバー上の画像へのURLを含めることができるため、それも取得できます-

于 2012-09-26T14:54:12.693 に答える
2

selenium-rcを使用する

于 2009-10-01T13:40:55.960 に答える
2

awt.RobotでcreateScreenCaptureメソッドを使用できます。この方法では、画面のどの部分をキャプチャするかを指定できます。したがって、キャプチャするWebページを含むウィンドウの座標を決定する必要があります。

于 2009-10-01T13:49:57.767 に答える
1

HTMLを純粋なJavaでレンダリングするには、FlyingSaucerを参照してください。

http://code.google.com/p/flying-saucer//

XML / XHTML /CSS2.1をレンダリングします

有効なXMLまたはXHTMLでのみ機能すると思います。したがって、無効なHTMLをレンダリングする必要がある場合は、ネコなどのツールを使用してクリーンアップしてから、フライングソーサーに渡します。

于 2009-10-01T14:18:12.843 に答える