2

問題は、幅と高さが WebView の作成中に設定され、ページが読み込まれた後に変更するオプションが表示されないことです (実際のサイズが判明しました)。それを回避するには、2 つの WebView を使用します。最初にサイズを取得し、次にスクリーンショットを作成します。

static bool finishedLoading;
static bool finishedScroll;
static ScrollData scrollData;

static void Main(string[] args)
{
   WebCore.Initialize(new WebCoreConfig() { CustomCSS = "::-webkit-scrollbar { visibility: hidden; }" });

   var webView1 = WebCore.CreateWebView(800, 600, false);
   webView1.LoadURL("http://someurl");
   webView1.LoadCompleted += OnFinishLoading;

   while (!finishedLoading)
   {
      Thread.Sleep(100);
      WebCore.Update();
   }

   webView1.RequestScrollData();
   webView1.ScrollDataReceived += new ScrollDataReceivedEventHandler(ScrollDataReceived);

   while (!finishedScroll)
   {
      Thread.Sleep(100);
      WebCore.Update();
   }

   var webView2 = WebCore.CreateWebView(scrollData.ContentWidth, scrollData.ContentHeight, false);

   finishedLoading = false;
   webView2.LoadURL("http://someUrl");
   webView2.LoadCompleted += OnFinishLoading;

   while (!finishedLoading)
   {
      Thread.Sleep(100);
      WebCore.Update();
   }

   webView2.Render().SaveToPNG("filePath");

   WebCore.Shutdown();
}

static void ScrollDataReceived(object sender, ScrollDataEventArgs e)
{
   finishedScroll = true;
   scrollData = e.ScrollData;
}

static void OnFinishLoading(object sender, EventArgs e)
{
   finishedLoading = true;
}

もっと良い方法があることを願っています...

4

1 に答える 1

2

スクロール サイズを受け取った後に新しい WebView を作成する代わりに、WebView.Resize を使用してサイズを変更し、サイズ変更操作が完了するまで待つ必要があります (WebView.IsResizing を参照)。

最近、Awesomium を使用して Web ページ全体をキャプチャする方法に関するチュートリアルを書きました: http://labs.awesomium.com/capturing-web-pages-with-c/

コードは C API を使用していますが、.NET API と非常によく似ている必要があります。RAM を消費せずに非常に長い Web ページを複数の画像にキャプチャする方法を示す完全なコード例 (リンクは下部にあります) もあります。

お役に立てれば!

于 2011-08-08T03:13:24.263 に答える