C# 获取web浏览器控件的屏幕截图?

C# 获取web浏览器控件的屏幕截图?,c#,webbrowser-control,screenshot,C#,Webbrowser Control,Screenshot,关于这一点有很多线索,但没有一条是清晰的,我尝试过的也没有一条是正确的 获取整个web浏览器控件(即使是屏幕外控件)内容的代码是什么 看起来他们确实有: webBrowser1.DrawToBitmap(); // but its unsupported and doesnt work 尝试确保在DocumentCompleted事件中调用该方法 webBrowser1.Width = wb.Document.Body.ScrollRectangle.Width; webBrowser

关于这一点有很多线索,但没有一条是清晰的,我尝试过的也没有一条是正确的

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

看起来他们确实有:

webBrowser1.DrawToBitmap(); // but its unsupported and doesnt work

  • 尝试确保在
    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));
    

    上周我在我的项目中做了一个类似的函数,读了一些关于这个主题的帖子,包括你的链接。我想分享我的经验:

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

    但它不受支持,也不起作用

    它是受支持的,确实有效,但并不总是很好。在某些情况下,您会得到一个空白图像截图(根据我的经验,加载的html越复杂,失败的可能性就越大。在我的项目中,只有非常简单且格式良好的html才会加载到WebBrowser控件中,因此我永远不会得到空白图像)

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


    如果你的意思是这样的话,那么链接到这些线程并指定它们为什么不工作怎么样。顺便说一句,你知道答案吗?@user1873073请发布你的部分代码。特别是在加载文档和文档完成事件的位置。可能就是这样,但我的目标是能够进行google图像搜索,单击“显示更多”,直到它到达底部,然后单击按钮,这样documentcompleted就不会工作了。@user1873073不确定为什么您认为它不会工作。完成的文档将被多次调用(每个新请求调用一次)。重要的是它在最后一次调用中所做的事情。你知道,我最初编写了这个巨大的实现,它直接从打开控件的窗口中拍摄了一张图片,然后滚动控件,并将图像缝合在一起。然后我修复了尽可能多的与滚动相关的问题。。。但刚才我随机找到了你的帖子,瞪大了眼睛:你可以把宽度设置成远远大于屏幕上显示的宽度,这没有问题?!你的两行字取代了我节目中的200-300行。唯一的区别是我现在使用的是activeX捕获器,因为DrawToBitmap不可靠。无论如何,谢谢你简化了我的代码。对于你所面临的“空白图像问题”,你有什么解决办法吗。因为我刚刚面对它。ThanksI将svg图像作为背景,html放在上面,json中的数据映射到webbrowser控件中的dom。我得到的是空白图像well@Sandeep正如我在回答中所说的,如果HTML页面相当复杂,我不知道如何解决空白页面问题。
    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();
         }
    }