我正在使用System.Windows.Forms.WebBrowser
控件,我需要以编程方式滚动。
例如,我使用此代码向下滚动:
WebBrowser.Document.Body.ScrollTop += WebBrowser.Height
问题在于,在某些网站中它可以正常工作,但在其他网站中它不会
http://news.google.com (works good)
http://stackoverflow.com/ (doesn't work)
这可能与身体代码有关,但我无法弄清楚 我也试过了:
WebBrowser.Document.Window.ScrollTo(0, 50)
但这样我不知道现在的位置。
答案 0 :(得分:5)
此示例适用于可能导致您看到的行为的滚动条属性中的怪癖。
在此之前,您需要添加一个COM引用到Microsoft HTML Object Library(mshtml)。
假设您有一个名为webBrowser1的WebBrowser,您可以尝试以下操作。我使用了几个不同的接口,因为我发现滚动属性返回的值不一致。
using mshtml;
// ... snip ...
webBrowser1.Navigate("http://www.stackoverflow.com");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
System.Threading.Thread.Sleep(20);
}
Rectangle bounds = webBrowser1.Document.Body.ScrollRectangle;
IHTMLElement2 body = webBrowser1.Document.Body.DomElement as IHTMLElement2;
IHTMLElement2 doc = (webBrowser1.Document.DomDocument as IHTMLDocument3).documentElement as IHTMLElement2;
int scrollHeight = Math.Max(body.scrollHeight, bounds.Height);
int scrollWidth = Math.Max(body.scrollWidth, bounds.Width);
scrollHeight = Math.Max(body.scrollHeight, scrollHeight);
scrollWidth = Math.Max(body.scrollWidth, scrollWidth);
doc.scrollTop = 500;
答案 1 :(得分:4)
webBrowser1.Document.Window.ScrollTo(new Point(50, 50));
这是滚动到每个点只需输入
的简单方法