获取Web浏览器控件的屏幕截图?

关于这一点有很多线索,但没有一个是明确的,没有我尝试过甚至工作正常。

获取整个Web浏览器控件内容的代码是什么(即使是屏幕外的内容)?

看起来他们确实有:

webBrowser1.DrawToBitmap(); // but its unsupported and doesnt work 
  1. 第三方api – 不浪费我的时间
  2. .DrawToBitmap和nonanswer-links
  3. 100个错误答案
  4. 只是截图

上周我在我的项目中正在开发一个类似的function,阅读了一些关于这个主题的post,包括你的链接。 我想分享一下我的经历:

该函数的关键部分是System.Windows.Forms.WebBrowser.DrawToBitmap方法。

但它没有支持,也没有工作

它受支持并且确实有效,但并不总是正常工作。 在某些情况下,你会得到一个空白图像截图(根据我的经验,它加载的更复杂的HTML,它失败的可能性越大。在我的项目中,只有非常简单和格式良好的htmls将被加载到WebBrowser控件中,所以我永远不会得到空白图像)。

无论如何,我也没有100%完美的解决方案。 这是我的核心代码的一部分,希望它有所帮助(它适用于ASP.NET MVC 3)。

 using (var browser = new System.Windows.Forms.WebBrowser()) { browser.DocumentCompleted += delegate { using (var pic = new Bitmap(browser.Width, browser.Height)) { browser.DrawToBitmap(pic, new Rectangle(0, 0, pic.Width, pic.Height)); pic.Save(imagePath); } }; browser.Navigate(Server.MapPath("~") + htmlPath); //a file or a url browser.ScrollBarsEnabled = false; while (browser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete) { System.Windows.Forms.Application.DoEvents(); } } 

尝试确保在DocumentCompleted事件中调用方法。

 webBrowser1.Width = wb.Document.Body.ScrollRectangle.Width; webBrowser1.Height = wb.Document.Body.ScrollRectangle.Height; Bitmap bitmap = new Bitmap(webBrowser1.Width, webBrowser1.Height); webBrowser1.DrawToBitmap(bitmap, new Rectangle(0, 0, webBrowser1.Width, webBrowser1.Height));