none
点击按钮后,webBrowser载入页面,并且页面自动向下滚动 RRS feed

  • 问题

  • 点击按钮后,webBrowser载入页面,并且页面自动向下滚动
    滚动结束后,自动载入下一页面,如此循环
    2010年4月2日 11:47

答案

  • Hi,

    我想你需要用Javascript来做。

    • 已标记为答案 yzjiujian 2010年4月7日 2:48
    2010年4月2日 12:53
  • csdn上某牛人的回帖
    C# code
    .... { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 访问链接 /// </summary> public const string url = "http://baike.baidu.com/view/{0}.htm"; /// <summary> /// 每次滚动的像素 /// </summary> public int offsetY = 3; /// <summary> /// 滚动的间隔时间毫秒为单位 /// </summary> public int interval = 10; /// <summary> /// 当前页数 /// </summary> public int page = 1; /// <summary> /// 是否自动滚动 /// </summary> public bool autoScroll = false; /// <summary> /// 加载页面 /// </summary> public void openUrl() { webBrowser1.Navigate(string.Format(url, page)); } /// <summary> /// 开始滚屏 /// </summary> public void startScroll() { webBrowser1.Navigate(string.Format(@"javascript: (function() {{ var body = document.documentElement && document.compatMode == 'CSS1Compat' ? document.documentElement : document.body; clearInterval(window.timerAutoScroll); window.timerAutoScroll = setInterval(function() {{ scrollBy(0, {0}); if (body.scrollHeight <= body.clientHeight + body.scrollTop) {{ clearInterval(window.timerAutoScroll); location = '{2}' }} }}, {1}); }})();", offsetY, interval, string.Format(url, page)) ); } /// <summary> /// 停止滚屏 /// </summary> public void stopScroll() { webBrowser1.Navigate(@"javascript:clearInterval(window.timerAutoScroll);"); } private void Form1_Load(object sender, EventArgs e) { openUrl(); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!autoScroll || string.Compare(e.Url.ToString(), string.Format(url, page), true) != 0) return; // 不滚屏或者加载完成的不是当前页面 page++; // 下一页 startScroll(); } private void buttonStart_Click(object sender, EventArgs e) { if (autoScroll) return; autoScroll = true; startScroll(); } private void buttonStop_Click(object sender, EventArgs e) { if (!autoScroll) return; autoScroll = false; stopScroll(); } } }
    • 已标记为答案 yzjiujian 2010年4月7日 2:48
    2010年4月7日 2:48

全部回复

  • Hi,

    我想你需要用Javascript来做。

    • 已标记为答案 yzjiujian 2010年4月7日 2:48
    2010年4月2日 12:53
  • 你好!

         你可以尝试设置这个属性:webbrowser1.document.body.scrolltop来自动滚动!


    周雪峰
    2010年4月2日 13:19
    版主
  • 你好!

         你可以尝试设置这个属性:webbrowser1.document.body.scrolltop来自动滚动!


    周雪峰


    一开始以为不行,后来发现有的页可以,有的页不行。

    后来查了一下,原来和

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

    有关

    原来:

    页面具有 DTD(或者说指定了 DOCTYPE)时,使用 document.documentElement。
    页面不具有 DTD(或者说没有指定了 DOCTYPE)时,使用 document.body。
    详细出处参考:http://www.jb51.net/article/21168.htm

    但是只有webBrowser1.Document.Body.ScrollTop属性,没有其他的了?如何解决?

    • 已编辑 yzjiujian 2010年4月6日 7:59 增加修改
    2010年4月4日 2:29
  • csdn上某牛人的回帖
    C# code
    .... { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 访问链接 /// </summary> public const string url = "http://baike.baidu.com/view/{0}.htm"; /// <summary> /// 每次滚动的像素 /// </summary> public int offsetY = 3; /// <summary> /// 滚动的间隔时间毫秒为单位 /// </summary> public int interval = 10; /// <summary> /// 当前页数 /// </summary> public int page = 1; /// <summary> /// 是否自动滚动 /// </summary> public bool autoScroll = false; /// <summary> /// 加载页面 /// </summary> public void openUrl() { webBrowser1.Navigate(string.Format(url, page)); } /// <summary> /// 开始滚屏 /// </summary> public void startScroll() { webBrowser1.Navigate(string.Format(@"javascript: (function() {{ var body = document.documentElement && document.compatMode == 'CSS1Compat' ? document.documentElement : document.body; clearInterval(window.timerAutoScroll); window.timerAutoScroll = setInterval(function() {{ scrollBy(0, {0}); if (body.scrollHeight <= body.clientHeight + body.scrollTop) {{ clearInterval(window.timerAutoScroll); location = '{2}' }} }}, {1}); }})();", offsetY, interval, string.Format(url, page)) ); } /// <summary> /// 停止滚屏 /// </summary> public void stopScroll() { webBrowser1.Navigate(@"javascript:clearInterval(window.timerAutoScroll);"); } private void Form1_Load(object sender, EventArgs e) { openUrl(); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!autoScroll || string.Compare(e.Url.ToString(), string.Format(url, page), true) != 0) return; // 不滚屏或者加载完成的不是当前页面 page++; // 下一页 startScroll(); } private void buttonStart_Click(object sender, EventArgs e) { if (autoScroll) return; autoScroll = true; startScroll(); } private void buttonStop_Click(object sender, EventArgs e) { if (!autoScroll) return; autoScroll = false; stopScroll(); } } }
    • 已标记为答案 yzjiujian 2010年4月7日 2:48
    2010年4月7日 2:48