WebBrowser的DocumentCompleted事件遇到了一些问题,求助
WebBrowser是类似浏览器把?WebBrowser.DocumentCompleted是在页面加载完成之后,触发的时间,可是有些页面加载完成之后还在继续加载,这种行为是叫异步加载么?页面加载完成之后触发DocumentCompleted事件,但是一些Json数据和其他HTML代码,还在继续加载,但是等到这些所有的东西全部加载完成之后,可能因为地址没有变或者其他原因,就不再触发DocumentCompleted事件了。
所以把代码卸载DocumentCompleted事件里头,我取不到我需要的Json数据。
wbsTaoBaoIndex.DocumentCompleted += (sender, e) =>
{
if (wbsTaoBaoIndex.DocumentText.IndexOf("登陆页") > 0)
LoginUser();//登录
else if (wbsTaoBaoIndex.DocumentText.IndexOf("搜索数据") > 0)
;//
else if (wbsTaoBaoIndex.DocumentText.IndexOf("品牌数据") > 0)
;//
};
while (true)
{
Thread.Sleep(500);
Application.DoEvents();
System.IO.StreamReader streamReader = new System.IO.StreamReader(browser.DocumentStream, encoding);
string htmlDocumentText = streamReader.ReadToEnd();
//如果不加第二个判断,可能会在页面未全部加载就通过判断,因为页面并不是一次加载完,
//程序执行到这里的时候,WebBrowserReadyState可能已经完成,但是页面没有加载完成,
//所以此处需要多一个“搜索数据”的判断
if (browser.ReadyState == WebBrowserReadyState.Complete
&& htmlDocumentText.IndexOf("搜索数据") > 0)
//......其他代码
private void Delay(int Millisecond) //延迟系统时间,但系统又能同时能执行其它任务;
{
DateTime current = DateTime.Now;
while (current.AddMilliseconds(Millisecond) > DateTime.Now)
{
Application.DoEvents();//转让控制权
}
return;
}
主要的函数:
private bool WaitWebPageLoad()
{
int i=0;
string sUrl;
while (true)
{
Delay(50); //系统延迟50毫秒,够少了吧!
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) //先判断是否发生完成事件。
{
if (!webBrowser1.IsBusy) //再判断是浏览器是否繁忙
{
i = i + 1;
if (i == 2) //为什么 是2呢?因为每次加载frame完成时就会置IsBusy为false,未完成就就置IsBusy为false,你想一想,加载一次,然后再一次,再一次...... 最后一次.......
{
sUrl = webBrowser1.Url.ToString();
if (sUrl.Contains("res")) //这是判断没有网络的情况下
{
return false;
}
else
{
return true;
}
}
continue;
}
i=0;
}
}
}//当然你也可以加上超时的情况,那就让你自己解决了。