2

问题是在 WebView 创建期间设置了宽度和高度,并且在页面加载后我看不到任何更改它的选项(并且实际大小已知)。为了解决这个问题,我使用了两个 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 捕获整个网页的教程:http: //labs.awesomium.com/capturing-web-pages-with-c/

该代码使用 C API,但它应该与 .NET API 非常相似。还有一个完整的代码示例(链接在底部附近),演示了如何在不占用 RAM 的情况下将很长的网页捕获到多个图像中。

希望这可以帮助!

于 2011-08-08T03:13:24.263 回答