特定のWebページを読み取ってスクリーンショットを撮ることができる無料のツールはありますか?
上記の2つの答えに基づいて作成するには:
JavaでHTMLをレンダリングしてから画像に保存する-いくつかのJavaベースのHTMLレンダリングが存在しますが、すべて異なる欠点があります。最も一般的なものは、 組み込み 。これは非常にシンプルで、かなり基本的なHTMLしかレンダリングできません。私が知っている最も興味深いのは The Flying Saucer Project です。これはかなり複雑なXHTMLをレンダリングできますが、 HTMLを使用する前に変換する必要があります( JTindy が役立つかもしれません)Swingコンポーネントを取得して画像を作成するのは非常に簡単です。 BufferedImage
s graphics オブジェクトを作成してSwingコンポーネントに渡します Paint メソッド。次に、 ImageIO でスプラットします。
これの大きな利点は、レンダラーがヘッドレスになることです。欠点は、完全なレンダリングではなく、プラグインがないことです。
2番目のオプションでは、Webブラウザーを起動し、それがどこにあるかを調べてから、スクリーンショットを撮る必要があります。オプションで、Firefox/IE/Opera/etcのすべてのメニューを取り除いて、画像だけを残すこともできます。 Webブラウザーのサイズを取得する最も簡単なオプションは、フルスクリーンで起動することです。他のオプションは、JDICs browser コンポーネントのようなものを使用してJavaアプリケーションの一部として含めることです。これにより、HTMLの場所を指定できます。画面にレンダリングし、次に Robot を使用して、その領域のスクリーンショットを作成します。
これの大きな利点は、(特定のブラウザに対して)完全なレンダリングを提供することです。 2つの欠点は、ネイティブコードが必要になる(または少なくともネイティブコンポーネントを使用する)ことと、ヘッドレスにならないことです¹。
1)仮想フレームバッファーを使用できます。しかし、それはJavaの外側です。
VirtualFramebufferとFirefox Binaryを使用したSelenium 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();
}
}
それはJavaではありませんが、ここに来て、私が最終的に使用したものなので、言及する価値があると思います。 PhantomJs を使用すると、ヘッドレスバージョンのWebkitを実行し、スクリーンキャプチャのリクエストを処理してローカルに保存できる組み込みのマングースWebサーバーを通じて機能にアクセスできます。 Java=を使用してリクエストを行うことができます。レスポンスにはサーバー上の画像へのURLを含めることができるため、それを取得することもできます-
selenium-rcを使用
Awt.RobotでcreateScreenCaptureメソッドを使用できます。このメソッドでは、画面のどの部分をキャプチャするかを指定できます。したがって、キャプチャしたいWebページを含むウィンドウの座標を決定する必要があります。
純粋なJavaでHTMLをレンダリングするには、フライングソーサーをご覧ください。
http://code.google.com/p/flying-saucer//
XML/XHTML/CSS 2.1をレンダリングします
有効なXMLまたはXHTMLでのみ機能するので、無効なHTMLをレンダリングする必要がある場合は、nekoなどのツールを使用して、空飛ぶ円盤に渡す前にクリーンアップしてください。