从WinForms WebBrowser控件获取页面高度

10

最近几天我一直在尝试从 WebBrowser 控件的 Document 属性中获取网页的高度。

以下是我的最新尝试。

HtmlElementCollection children = webBrowser.Document.All;
int maxOffset = 0;


foreach (HtmlElement child in children) {
    int bottom = 0;
    bottom = child.OffsetRectangle.Bottom;
    if (bottom > maxOffset) {
        maxOffset = bottom;
        pageHeight = maxOffset;
    }
}

我试图通过找到页面中最低元素的底部偏移量来计算页面的最大高度。

问题是这会在大多数情况下超出页面实际长度约500px。

有人有任何想法吗?我简直无法相信获取页面高度如此困难!

3个回答

16

这对我有用:

webBrowser.Document.Body.ScrollRectangle.Height

好的,但是当页面托管在另一台机器上时,它就无法工作。如果页面托管在我的本地机器上,高度和宽度都会正确呈现。有什么见解吗? - NLV
你在http://www.regular-expressions.info/上试过这个吗?它返回122作为滚动高度,但@Morgeh的代码是正确的。 - Rajeev
这是因为 regular-expressions.info 使用了 iFrames。顶部标题在一个单独的框架中,下面的内容在另一个 iFrame 中。不知道如何使其与 iFrames 协同工作。 - NLV
1
完美地运行。在尝试此操作时,需要确保文档已完全加载。 - Alex Pakka
@NLV:你确定“在不同的机器上托管”没有导致加载变慢,而你的文档还没有准备好报告其高度(与更快的本地服务器/网页不同)吗? - Alex Pakka

1
找到 BODY 标签并获取该元素的 OffsetRectangle.Bottom。这将给出页面的高度。

那对我不起作用。它总是给我浏览器控件的大小,而不是内容的大小。 - Niki

0

webBrowser.Document.Body.ScrollRectangle.Height给我一个截断的页面,不知道为什么。

我是这样做的。

循环元素选择最大高度/宽度。我在documentCompleted事件之后使用了这个。

    //fit to content  -get size **after documentCompleted**
    var wbAll = webBrowser.Document.All.Cast<HtmlElement>();
    var maxWidth = wbAll.Max(x => Math.Max(x.ClientRectangle.Width, x.ScrollRectangle.Width));
    var maxHeight =wbAll.Max(x => Math.Max(x.ClientRectangle.Height, x.ScrollRectangle.Height));

    webBrowser.Height = maxHeight;
    webBrowser.Width = maxWidth;

虽然不太准确。 - Gray Programmerz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接