WebBrowser控制内容的宽度/高度

本文关键字:高度 控制 WebBrowser | 更新日期: 2023-09-27 18:28:33

我在尝试根据满载页面的内容以编程方式确定网络浏览器的宽度和高度时遇到了困难。我需要这些信息来捕捉网页的屏幕截图。

这发生在按钮点击事件中

wbNY.Navigate(new Uri("http://www.website.com"), "_self");
wbNY.DocumentCompleted += wbNY_DocumentCompleted;

这是我的文件完成代码

private void wbNY_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (e.Url == wbNY.Url)
    {
        if (wbNY.ReadyState == WebBrowserReadyState.Complete)
        {
            DoPageChecks();
        }
    }
}

在DoPageChecks中,我将此方法称为

TakeScreenshot(wbNY);

这是我的TakeScreenshot方法

protected void TakeScreenshot(WebBrowser wb)
{
    Size pageSize = new Size(wb.Document.Window.Size.Width,wb.Document.Window.Size.Height)
}

我的屏幕截图代码运行良好,所以我只是显示所有内容,直到我试图获得网络浏览器内容的高度和宽度,这样我就可以用正确的尺寸拍摄屏幕截图。

我也试过

    Size pageSize = new Size(wb.Document.Body.ScrollRectangle.Width,wb.Document.Body.ScrollRectangle.Height)

但这也没有给出正确的值。

更具体地说,当实际结果应该接近800px+

WebBrowser控制内容的宽度/高度

时,高度为0,有时为~20px

最终,我发现mshtml拥有获取宽度/高度的工具。

最终截屏方式:

protected void TakeScreenshot(WebBrowser wb)
{
    mshtml.IHTMLDocument2 docs2 = (mshtml.IHTMLDocument2)wbNY.Document.DomDocument;
    mshtml.IHTMLDocument3 docs3 = (mshtml.IHTMLDocument3)wbNY.Document.DomDocument;
    mshtml.IHTMLElement2 body2 = (mshtml.IHTMLElement2)docs2.body;
    mshtml.IHTMLElement2 root2 = (mshtml.IHTMLElement2)docs3.documentElement;
    int width = Math.Max(body2.scrollWidth, root2.scrollWidth);
    int height = Math.Max(root2.scrollHeight, body2.scrollHeight);
    // Resize the control to the exact size to display the page. Also, make sure scroll bars are disabled
    wb.Width = width;
    wb.Height = height;
    Bitmap bitmap = new Bitmap(width, height);
    wb.DrawToBitmap(bitmap, new Rectangle(0, 0, width, height));
    bitmap.Save(SaveImgDirectory + filename);
}

如果想要获得ActualHeight和ActualWidth,它们会返回窗口的渲染高度和宽度,这是您在截屏时想要的。