求C#获取多个网页的内容(网页为ajax异步加载数据)

user2007001 2016-10-26 02:59:24
单网页的方法
        private void Form1_Load(object sender, EventArgs e)
{
string URL = "网址";//网址
webBrowser1.Navigate(URL);
}
private void timer1_Tick(object sender, EventArgs e)
{
HtmlElement elem = webBrowser1.Document.GetElementById("pageForm");//加载完成后才有的标签
if (elem != null)
{
textBox2.Text = webBrowser1.Document.Body.OuterHtml;
timer1.Enabled = false;
}
}

问题来了,假如URL是多个网址,应该怎么实现?
...全文
553 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
user2007001 2016-10-31
  • 打赏
  • 举报
回复
几天了没有答案,结贴给分算了
user2007001 2016-10-28
  • 打赏
  • 举报
回复
自己顶下,别沉咯
user2007001 2016-10-27
  • 打赏
  • 举报
回复
引用 10 楼 yanbuodiao 的回复:
[quote=引用 9 楼 user2007001 的回复:] 怎么实现要原线程webBrowser1继续加载同时又能等待Timer执行完成?
最无厘头的做法 你每打开一个URL 就起来一个Timer去检测去 稍微好点的做法 你循环去打开你的URL 你的timer里面停止的条件是检测到所有的URL资源加载完毕 而不是仅检测一个[/quote] 如果有几千个网页,不是卡死了
烟波钓 2016-10-27
  • 打赏
  • 举报
回复
引用 9 楼 user2007001 的回复:
怎么实现要原线程webBrowser1继续加载同时又能等待Timer执行完成?
最无厘头的做法 你每打开一个URL 就起来一个Timer去检测去 稍微好点的做法 你循环去打开你的URL 你的timer里面停止的条件是检测到所有的URL资源加载完毕 而不是仅检测一个
user2007001 2016-10-27
  • 打赏
  • 举报
回复
引用 8 楼 yanbuodiao 的回复:
[quote=引用 7 楼 user2007001 的回复:] 问题没有描述清楚,我补充一下: 单个URL执行过程是打开webBrowser1加载URL,然后利用Timer来判断网页是否加载完成,完成则终止Timer 多个URL,循环加载执行过程是打开webBrowser1加载URL,我需要的是Timer结束后继续执行循环,但实际过程是循环一股脑跑完了,然后执行Timer,并没有得到所有我想要的网页内容
timer 起来的是另外的线程 对当前线程是不堵塞的[/quote] 怎么实现要原线程webBrowser1继续加载同时又能等待Timer执行完成?
烟波钓 2016-10-27
  • 打赏
  • 举报
回复
引用 7 楼 user2007001 的回复:
问题没有描述清楚,我补充一下: 单个URL执行过程是打开webBrowser1加载URL,然后利用Timer来判断网页是否加载完成,完成则终止Timer 多个URL,循环加载执行过程是打开webBrowser1加载URL,我需要的是Timer结束后继续执行循环,但实际过程是循环一股脑跑完了,然后执行Timer,并没有得到所有我想要的网页内容
timer 起来的是另外的线程 对当前线程是不堵塞的
user2007001 2016-10-26
  • 打赏
  • 举报
回复
问题没有描述清楚,我补充一下: 单个URL执行过程是打开webBrowser1加载URL,然后利用Timer来判断网页是否加载完成,完成则终止Timer 多个URL,循环加载执行过程是打开webBrowser1加载URL,我需要的是Timer结束后继续执行循环,但实际过程是循环一股脑跑完了,然后执行Timer,并没有得到所有我想要的网页内容
  • 打赏
  • 举报
回复
写不出来
  • 打赏
  • 举报
回复
你当然应该在 timer1.Enabled = false; 之后才 Navigate 到下一个网址。 好好画个流程图吧。这个流程图中,你如何表达 Timer 的?如果你把流程表达为一个“循环”语句,那么你从设计图上就错了,代码肯定也血不多。
user2007001 2016-10-26
  • 打赏
  • 举报
回复
引用 2 楼 Mynameisamirror 的回复:
[quote=引用 楼主 user2007001 的回复:] 单网页的方法
        private void Form1_Load(object sender, EventArgs e)
        {
            string URL = "网址";//网址
            webBrowser1.Navigate(URL);
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            HtmlElement elem = webBrowser1.Document.GetElementById("pageForm");//加载完成后才有的标签
            if (elem != null)
            {
                textBox2.Text = webBrowser1.Document.Body.OuterHtml;
                timer1.Enabled = false;
            }
        }
问题来了,假如URL是多个网址,应该怎么实现?
如果只是在一个页面加载多个页面可以使用iframe[/quote] 你是说启用sMdiContainer吗?
user2007001 2016-10-26
  • 打赏
  • 举报
回复
引用 1 楼 zhoujg751206 的回复:
List<string> mlist = new List<string>; string URL = "网址2";//网址 加到mlist里面。然后循环。写到一起
我没有表达清楚,问题就在循环这里,当我循环
string URL = "网址";//网址
            webBrowser1.Navigate(URL);
时,timer并没有完成我需要的工作
㤁孞 2016-10-26
  • 打赏
  • 举报
回复
引用 楼主 user2007001 的回复:
单网页的方法
        private void Form1_Load(object sender, EventArgs e)
        {
            string URL = "网址";//网址
            webBrowser1.Navigate(URL);
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            HtmlElement elem = webBrowser1.Document.GetElementById("pageForm");//加载完成后才有的标签
            if (elem != null)
            {
                textBox2.Text = webBrowser1.Document.Body.OuterHtml;
                timer1.Enabled = false;
            }
        }
问题来了,假如URL是多个网址,应该怎么实现?
如果只是在一个页面加载多个页面可以使用iframe
  • 打赏
  • 举报
回复
List<string> mlist = new List<string>; string URL = "网址2";//网址 加到mlist里面。然后循环。写到一起

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧