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

use*_*073 5 c# screenshot webbrowser-control

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

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

看起来他们确实有:

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

sca*_*tag 6

尽量确保在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));
Run Code Online (Sandbox Code Playgroud)


Che*_*hen 3

上周我在我的项目中开发了一个类似的功能,阅读了有关该主题的一些帖子,包括您的链接。我想分享一下我的经验:

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

但它不受支持并且不起作用

它受支持并且确实有效,但并不总是能正常工作。在某些情况下,你会得到一个空白图像屏幕截图(根据我的经验,它加载的 html 越复杂,失败的可能性就越大。在我的项目中,只有非常简单且格式良好的 html 才会加载到 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();
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 您是否有解决您遇到的“空白图像问题”的问题?因为我刚刚面对过。谢谢 (2认同)