C#采集时使用WebBrowser判断加载的问题

时间:16-12-12 栏目:C#开发 作者:kyle 评论:0 点击: 2,567 次

 

C#调用IE系统的WebBrowser做一些采集或者自动任务时,需要判断页面加载完成才执行我们的代码,但是WebBrowser的页面加载特别贱。

 

系统会触发多次DocumentCompleted事件。

 

而且有时候会报错,各种异常等。

 

网上有很多乱七八糟的判断方法,基本都有问题,或者是解决不完整。

 

我自己有2个解决方案可以基本解决这个问题。

 

方案一是DocumentCompleted事件里面,先做基本判断

if (((WebBrowser)send).ReadyState != WebBrowserReadyState.Complete)
                   return;

if ((WebBrowser)send == null) return;

 

string url=e.Url;

 

然后判断URL是否满足条件再进行下一步代码操作

if(url.indexof(“index.html”)>-1){

//执行首页的任务

}

 

if(url.indexof(“content2.html”)>-1)

{

//执行内容页的任务。

}

 

虽然这样会麻烦一点,但是在URL上做了判断之后会极大减少出错的可能。

 

方案二比较高端,目标搜出来的好多内容都没有用到,我自己独创的一个贱贱的方法。

在documentCompleted事件里面,记录下标题长度,URL长度。内容的长度。

用一个while()死循环去判断。

如果这次的长度和上一次一样,成功加1,否则失败加1

然后休息1秒。

大概应该是这样的逻辑

int titleLength=0;

int bodyLength=0;

int urlLength=0;

int SuccessCOunt=0;

int errorCount=0;

while(true)

{

if (document.gettitleLength==titleLength && bodyLength==document.outHtml.length && urlLength==url.length)

{

SuccessCOunt++;

application.doevent()//防止UI假死

}else{

errorCount++;

}

Thead.Sleep(1000);

if(errorCount>10) break;//连续10次还没取成功就退出程序。可以设为一个超时时间。

if(scucessCOunt>5);//5次未变化,页面应该是加载完成了。

break;

}

 

//这里执行业务逻辑

代码逻辑大概是这样,通过多次判断页面的长度和标题的长度和URL的长度。判断页面是否确实已经加载完成了。

 

用长度不用字符串相等是为了省内存。

 

代码并不是我自己的完整代码,但是逻辑是对的。自己尝试下吧

成都SEO小五嚎2句: 本文是(成都SEO小五)辛苦弄出来的,转载成都SEO小五原创的请保留链接: C#采集时使用WebBrowser判断加载的问题,3Q

C#采集时使用WebBrowser判断加载的问题:等您坐沙发呢!

来给哥评论评论


------====== 小五公告 ======------
成都SEO小五,专注成都搜索引擎优化。
小五善长站内外优化,C#、PHP开发,中英文SEO,Google中英文和百度优化技术。欢迎群内交流。伸手党请绕路,求资源的请绕开,求问题解答的请进群内交流。开放了一个QQ交流群:160750032。加入验证时请标注任何SEO相交字眼。友情链接直接Q我,收录正常,内容大部份原创、SEO或者程序开发、网络营销、线上推广等相关行业即可。

常用工具

赞助广告

来看过哥的人