问题是在创建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;
}
我希望有更好的方法......
答案 0 :(得分:2)
在收到滚动维度后,您只需要使用WebView.Resize调整其大小,然后等待调整大小操作完成(请参阅WebView.IsResizing),而不是创建新的WebView。
我最近写了一篇关于如何使用Awesomium捕捉整个网页的教程:http://labs.awesomium.com/capturing-web-pages-with-c/
代码使用C API但它应该与.NET API非常相似。还有一个完整的代码示例(链接在底部附近),演示如何在不中断RAM的情况下将非常长的网页捕获到多个图像。
希望这有帮助!