WebKit.NETを使用して、C#アプリケーションにブラウザコンポーネントを統合しています。問題は、スクリーンショットでブラウザウィンドウに表示される部分のみをキャプチャできることです。ページ全体のスクリーンショットをキャプチャする方法はありますか?C#とWebKit.NETで完全なWebサイトのスクリーンショットをキャプチャするには?
答えて
NativeMethods.SendMessageを使用すると、メッセージキューが壊れる可能性がありますが、http://cutycapt.sourceforge.net/またはおそらくhttp://iecapt.sourceforge.net/またはhttp://labs.awesomium.com/capturing-web-pages-with-c-net/を使用できますか?
代わりにWebBrowserを使用します。 ScrollBarsEnabled = false
私は全ページをキャプチャさせてください。ここで
はいくつかのコードです:
protected override void Render(HtmlTextWriter writer)
{
StringBuilder builder = new StringBuilder();
HtmlTextWriter htw = new HtmlTextWriter(new StringWriter(builder));
base.Render(htw);
string html = builder.ToString();
_Generate(html);
}
private void _Generate(string html)
{
var browser = new WebBrowser { ScrollBarsEnabled = false };
DisplayHtml(html, browser);
browser.DocumentCompleted += WebBrowser_DocumentCompleted;
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
browser.Dispose();
}
private void DisplayHtml(string html, WebBrowser browser)
{
browser.Navigate("about:blank");
if (browser.Document != null)
{
browser.Document.Write(string.Empty);
}
browser.DocumentText = html;
}
私はWebBrowserコンポーネントを使用していくつかのソリューションを見つけましたが、WebKitエンジンを使用してそれをキャプチャすることに興味があります。 – topless
はこれを試してみてください。
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Threading;
using System.Windows.Forms;
public byte[] picbytes;
private void capture_Click(object sender, EventArgs e)
{
makepicture(txtURL.Text.Trim());
pictureBox1.Visible = true;
pictureBox1.Image = ByteToImage(picbytes);
}
private void makepicture(string url)
{
Thread thread = new Thread(delegate()
{
using (WebBrowser browser = new WebBrowser())
{
browser.ScrollBarsEnabled = false;
browser.AllowNavigation = true;
browser.Navigate(url);
browser.Width = 1024;
browser.Height = 1575;
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = sender as WebBrowser;
using (Bitmap bitmap = new Bitmap(browser.Width, browser.Height))
{
browser.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, browser.Width, browser.Height));
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte[] bytes = stream.ToArray();
picbytes = bytes;
}
}
}
public static Bitmap ByteToImage(byte[] blob)
{
MemoryStream mStream = new MemoryStream();
byte[] pData = blob;
mStream.Write(pData, 0, Convert.ToInt32(pData.Length));
Bitmap bm = new Bitmap(mStream, false);
mStream.Dispose();
return bm;
}
コードをインデントしてください。 ( 'Edit'、すべてを選択、Ctrl-k)。ありがとう。 – byako
これは完全に1つの脆弱性で動作します。ブラウザのコントロールを設定するためには、寸法を知る必要があります。私はそれが今、どのように幅広く、どれくらいの高さのWebページがあるかを見つける方法を見つける検索だと思います。 – Switch
内のDocumentCompleted()は、ブラウザオブジェクトを作成した直後に以下を追加します。 int height = browser.Document.Body.ScrollRectangle.Height; int width = browser.Document.Body.ScrollRectangle.Width; browser.Height = height; browser.Width = width; – Switch
- 1. powershellで完全なWebページのスクリーンショットを撮るには?
- 2. 完全なテーブルビューのスクリーンショットをキャプチャする方法
- 3. パラメータ完全なWebサイトの管理!
- 4. Seleniumの不完全なスクリーンショット
- 5. Silverlightで完全なWebサイトを作成することは可能ですか?
- 6. C#で完全なWebページHTMLを取得するには?
- 7. ScrollView Androidの完全なスクリーンショットを取得
- 8. シェルスクリプトで完全なdataTimeをキャプチャするには?
- 9. Silverlightの完全なWebサイトを持っているのは正常ですか?
- 10. コードを使用したASP.NET完全なWebサイトの例
- 11. Node.jsが完全なWebサイトをダウンロードしていません
- 12. ビデオファイルのスクリーンショットをキャプチャする
- 13. Qt:EGLFSウィンドウのスクリーンショットを取る - ピクセル完全な同じ結果?
- 14. 完全に異なるHTTPSサイトにコンテンツを送信するHTTPSサイトのHTMLフォーム
- 15. キャプチャIE9でSeleniumを使用したページ全体のスクリーンショット
- 16. C#Webbrowserが完全にWebページをロードしない
- 17. UIReplicantViewのUIImageスクリーンショットをキャプチャすることは可能ですか?
- 18. TestNG @BeforeMethodのスクリーンショットをキャプチャすることはできますか?
- 19. ASP.Net Webサイトとエージェントの間でサービスコールを安全にするサービス
- 20. 完全にキャッシュされた動的Webサイト
- 21. ウィンドウを完全にキャプチャする方法は?
- 22. OS XにはないWebブラウザでページ全体のスクリーンショットを撮りますか?
- 23. WebサイトではなくC#Webアプリケーションのユーザーコントロールを動的にロード
- 24. アンドロイドアプリケーションからモバイルではなく完全なWebサイトをプログラムで接続する方法
- 25. Selenium Gridでスクリーンショットをキャプチャしない
- 26. プログラムでファイルをWebサイトにアップロードして出力をキャプチャする
- 27. のWindows Phone取っていないスクリーンショットを完全
- 28. スクリーンショットよりも大きなスクリーンショットをキャプチャできません
- 29. スクリーンショットをキャプチャする方法は?
- 30. Ebay:サイトで完全な商品リストを取得する
あなたのコードを投稿することができますか? –
@EmanueleGreco残念ながら、デモのために最小限のバージョンを抽出できるのであれば、明日は見ていきます。 – topless
JavaScriptコードを挿入するための中間層を提供しているので、私はawesomiumの解決策に行くと思います。これは、私の将来の計画にとって本当に便利です。 – topless