如何处理页面多次加载的问题

工作中需要读取一个网页的内容,貌似很简单,但总也读不到完整的内容。经过页面分析,原来该页面的部分内容是通过调用js来获取的。再一看被调用的js文件,相当复杂,立刻让我打起了退堂鼓。。。 为了省点事,加之不用太考虑效率的问题,我就改用WebBrower控件来读取页面,然后再从WebBrowser控件的InnerText属性获取文本内容。

 

但如何从WebBrowser控件来获取文本呢? 我开始在DocumentCompleted事件中读取InnerText,但结果不行,仍然是不完整的内容。后来上网了解到对于动态页面,DocumentCompleted事件其实是不可靠的,你需要自己判断页面是否加载完毕,在加载完毕后再去读取InnerText属性。

 

看了网上的一些做法,没找到简单易行的,最后自己探索了一个方法,对于效率要求不高的情况下,可以考虑使用。

 

1、增加一个Timer,设定好间隔事件。

2、在全局变量中增加一个变量做标志。

3、在WebBrowser的DocumentCompleted事件中把标志设为true;

4、在Timer的Tick事件中检测标志为false则返回,为true则下一步。

5、在Timer的Tick事件中检测WebBrowser的Document属性的All属性(可能是All[1]这样的)的InnerText值,如果出现了页面完成时的标记(根据实际情况设置)则对InnertText进行后续处理,并关闭Timer。否则返回。

6、如果是循环调取页面,那还需要在处理完InnerText后恢复标志的值为false,同时给WebBrowser设定新的Url。

 

综上,其原理就是每间隔一定事件检测一下WebBrowser的状态和属性,直到出现了自己需要的内容再进行处理。该方案可以通过调整Timer的间隔时间获得一个较为理想的处理效率。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

如何处理页面多次加载的问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭