问题描述
我的代码是这样子的,但是却获取不到一些页面的代码,我该怎么做。我是想获取QQ群成员页面的信息的页面地址是stringurl=string.Format("http://qun.qzone.qq.com/group#!/{0}/member",item.Value);privatevoidGet_Group_Number(){//获取群号码集合dic=GetHtml("http://qun.qzone.qq.com/group","groups_list","ul",1);string[]members_list=newstring[dic.Count];inti=0;foreach(varitemindic){//访问每个的单独URL并获取成员信息stringurl=string.Format("http://qun.qzone.qq.com/group#!/{0}/member",item.Value);browser1.Navigate(url);//访问群空间while(loading){Application.DoEvents();//等待本次加载完毕才执行下次循环.}//与上边的GetHtml()是不同的,是重载,获取每个群内的成员号码members_list[i]=GetHtml(browser1,"s_members_listmembers_list","div");i++;}}
解决方案
解决方案二:
在页面加载完成事件里面获取HTMLDocumentAjax的网页一般用定时器
解决方案三:
引用1楼pupo的回复:
在页面加载完成事件里面获取HTMLDocumentAjax的网页一般用定时器
我是在页面加载完成的时候判断了一下如果加载全部完成了,就终止循。如果没有加载完成就一直调用Doevents()来处理Windows消息。privatevoidbrowser1_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse){if(browser1.ReadyState==WebBrowserReadyState.Complete)///URL文档全部加载完成时{loading=false;}}而且如果单独的一个按钮跳转也是不执行navigate方法的
解决方案四:
还要判断e.URLif(browser1.ReadyState==WebBrowserReadyState.Complete)///URL文档全部加载完成时*****************************************************************************签名档:http://feiyun0112.cnblogs.com/
解决方案五:
引用3楼feiyun0112的回复:
还要判断e.URLif(browser1.ReadyState==WebBrowserReadyState.Complete)///URL文档全部加载完成时*****************************************************************************签名档:http://feiyun0112.cnblogs.com/
browser.URL总是比e.URL晚一个节奏,browser.URl是thisURL的时候e.URL是nextURL。但是还是会进入if块执行
解决方案六:
如果网页用了框架DocumentCompleted中你那样判断是不准确的
解决方案七:
引用5楼pupo的回复:
如果网页用了框架DocumentCompleted中你那样判断是不准确的
没有框架,源代码是检查过的。即便是用了框架,加上URL的判断也是可以的吧。。
解决方案八:
我看了下这个页面,是ajax加载的DocumentCompleted是没有用的,只用使用定时器,每隔一段时间去读取一下webbrowser.document
解决方案九:
你可以用WebClient类WebClientMyWebClient=newWebClient();Byte[]pageData;//MyWebClient.Credentials=CredentialCache.DefaultCredentials;//获取或设置用于对向Internet资源的请求进行身份验证的网络凭据。pageData=MyWebClient.DownloadData(url);//从指定网站下载数据pageHtml=Encoding.Default.GetString(pageData);//如果获取网站页面采用的是GB2312,则使用这句//pageHtml=Encoding.UTF8.GetString(pageData);//如果获取网站页面采用的是UTF-8,则使用这句
解决方案十:
publicstringdownHtmldata(stringhtmlBaseAddress,stringhtmlUrl){try{WebClientmyClientHtml=newWebClient();myClientHtml.BaseAddress=htmlBaseAddress;stringhtmlText=myClientHtml.DownloadString(htmlUrl);//下载数据returnhtmlText;//返回网页源代码}catch(Exceptione){showceshi(e.Message);//无网络解析报错}returnnull;}
找规律再用indexof和substring提取
解决方案十一:
引用8楼buafto的回复:
你可以用WebClient类WebClientMyWebClient=newWebClient();Byte[]pageData;//MyWebClient.Credentials=CredentialCache.DefaultCredentials;//获取或设置用于对向Internet资源的请求进行身份验证的网络凭据。pageData=MyWebClient.DownloadData(url);//从指定网站下载数据pageHtml=Encoding.Default.GetString(pageData);//如果获取网站页面采用的是GB2312,则使用这句//pageHtml=Encoding.UTF8.GetString(pageData);//如果获取网站页面采用的是UTF-8,则使用这句
网站是需要登录的,WebClient怎么登录呢
解决方案十二:
引用7楼pupo的回复:
我看了下这个页面,是ajax加载的DocumentCompleted是没有用的,只用使用定时器,每隔一段时间去读取一下webbrowser.document
我又看了一下,单纯的一个navigate也不会跳转