特定の Web サイトのスクリーン ショットを作成できるようにしたいのですが、Web サイトが画面に表示できるサイズよりも大きい場合があります。これを行う方法はありますか?
目標は、WinForms アプリケーションの C# で .NET を使用してこれを行うことです。
特定の Web サイトのスクリーン ショットを作成できるようにしたいのですが、Web サイトが画面に表示できるサイズよりも大きい場合があります。これを行う方法はありますか?
目標は、WinForms アプリケーションの C# で .NET を使用してこれを行うことです。
いくつかのツールがあります。
問題は、特定のプログラムでレンダリングし、スナップショットを作成する必要があるということです。.NET についてはわかりませんが、参考になるツールがいくつかあります。
さまざまなブラウザーのスクリーンショットを生成するweb サイトbrowsershots.orgについて知りました。ある程度、解像度を指定することもできます。
画面サイズの問題を除いて、指定したことを実行するプログラムをVB.NETで作成しました。
Web コントロール (すべてのコントロールの一番下を見てください) をフォームに埋め込み、その設定を微調整しました (スクロールを非表示)。タイマーを使用して動的コンテンツを待機し、「copyFromScreen」を使用して画像を取得しました。
私のプログラムには動的な寸法がありました(コマンドラインから設定可能)。プログラムを画面よりも大きくすると、画像は画面外の領域に黒いピクセルを返すだけであることがわかりました。私の仕事はその時点で完了していたので、私はそれ以上調査しませんでした.
良いスタートが切れることを願っています。不適切な表現がありましたことをお詫び申し上げます。Windows にログオンして開発するのは、数か月に 1 回だけです。
ページサイズが画面サイズよりも大きい場合は、WebBrowserコントロールでレンダリングしてスナップショットを作成できます。スクロールコントロールで1つ以上のスナップショットを作成してから、すべての写真をマージする必要があります:)
Web サイトの Java スクリーンショット
画面を組み合わせて、最終的な Web ページ全体のスクリーンショットを作成します。
public static void main(String[] args) throws FileNotFoundException, IOException {
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
ChromeDriver browser = new ChromeDriver();
WebDriver driver = browser;
driver.get("https://news.google.co.in/");
driver.manage().timeouts().implicitlyWait(500, TimeUnit.SECONDS);
JavascriptExecutor jse = (JavascriptExecutor) driver;
Long clientHeight = (Long) jse.executeScript("return document.documentElement.clientHeight");
Long scrollHeight = (Long) jse.executeScript("return document.documentElement.scrollHeight");
int screens = 0, xAxis = 0, yAxis = clientHeight.intValue();
String screenNames = "D:\\Screenshots\\Yash";
for (screens = 0; ; screens++) {
if (scrollHeight.intValue() - xAxis < clientHeight) {
File crop = new File(screenNames + screens+".jpg");
FileUtils.copyFile(browser.getScreenshotAs(OutputType.FILE), crop);
BufferedImage image = ImageIO.read(new FileInputStream(crop));
int y_Axixs = scrollHeight.intValue() - xAxis;
BufferedImage croppedImage = image.getSubimage(0, image.getHeight()-y_Axixs, image.getWidth(), y_Axixs);
ImageIO.write(croppedImage, "jpg", crop);
break;
}
FileUtils.copyFile(browser.getScreenshotAs(OutputType.FILE), new File(screenNames + screens+".jpg"));
jse.executeScript("window.scrollBy("+ xAxis +", "+yAxis+")");
jse.executeScript("var elems = window.document.getElementsByTagName('*');"
+ " for(i = 0; i < elems.length; i++) { "
+ " var elemStyle = window.getComputedStyle(elems[i], null);"
+ " if(elemStyle.getPropertyValue('position') == 'fixed' && elems[i].innerHTML.length != 0 ){"
+ " elems[i].parentNode.removeChild(elems[i]); "
+ "}}"); // Sticky Content Removes
xAxis += yAxis;
}
driver.quit();
}
スクリーン ショットとして実行すると、醜くなる可能性があります。wget を使用してページのコンテンツ全体をキャプチャするのは簡単ですが、画像はレンダリングをキャプチャすることを意味します。
これを行うと主張するいくつかのツールを次に示します。
これは、プログラムでスクリーンショットを作成するためのコードです。
using System.Drawing.Imaging;
int screenWidth = Screen.GetBounds(new Point(0, 0)).Width;
int screenHeight = Screen.GetBounds(new Point(0, 0)).Height;
Bitmap bmpScreenShot = new Bitmap(screenWidth, screenHeight);
Graphics gfx = Graphics.FromImage((Image)bmpScreenShot);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));
bmpScreenShot.Save("test.jpg", ImageFormat.Jpeg);