I'm using the System.Windows.Forms.WebBrowser
control and I need to do programmatically scrolling.
For example, I use this code to scroll down:
WebBrowser.Document.Body.ScrollTop += WebBrowser.Height
The problem is that in some sites it works but in others it doesn't
http://news.google.com (works good)
http://stackoverflow.com/ (doesn't work)
It's can be something about the body code, but I can't figure out.
I've also tried:
WebBrowser.Document.Window.ScrollTo(0, 50)
but this way I don't know the current position.
webBrowser1.Document.Window.ScrollTo(new Point(50, 50));
this is an easy way to scroll to every point just input your
This example works around quirks in scroll bar properties that can cause the behavior you are seeing.
You will need to add a COM reference to Microsoft HTML Object Library (mshtml) before this will work.
Assuming you have a WebBrowser named webBrowser1, you can try the following. I use a couple different interfaces because I have found that the values returned for the scroll properties are inconsistent.
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;