WebBrowser小示例(二)

接下来我们对已经登录的校内网页进行数据读取:

接示例(一)中的操作,我们已经进入了校内官方个人首页,能看到在导航条的右侧有个搜索框,我们下面要完成的任务就是在winform页面中输入我们要搜索人的姓名,然后从结果页面中读取我们所要的信息:同示例(一)中一样,我们取得搜索文本框的id或name并生成HtmlElment对象并执行查询:

代码
string key = txtkey.Text.ToString();
            
if (key == "")
                
return;
            HtmlElement search 
= webBrowser1.Document.All["navSearchInput"];
            HtmlElement btn 
= webBrowser1.Document.All["navSearchSubmit"];
            
if (search == null || btn == null)
                
return;
            search.SetAttribute(
"value", key);
            btn.InvokeMember(
"click");

 

为避免页面刷新不完整会出现异常,我们可以用WebBrowser的DocumentCompleted和Navigated事件,前者在页面加载完毕时执行,后者在加载开始时执行,我们可以在这两个事件中设置一个初始值为0r 公有整形变量count,在执行Navigated时加1,在执行DocumentCompleted减1,如果count为0我们就读取页面:

 

代码
        private void webPage_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            count
++;            
        }
 
private void webPage_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
              count
--;
//因为我们搜索出来的校友都是以姓名:****   资料: ***  的形式显示所以可以使用string的split()函数截取。
            if (count == 0)
            {
//list-results 结果集div的id
                string innerText = this.webBrowser1.Document.GetElementById("list-results").InnerText;
            innerText 
= innerText.Replace("\r\n""");
            
string[] strInnerText= innerText.Split(new string[] { "姓名:"" 资料:" }, StringSplitOptions.RemoveEmptyEntries);
            ArrayList ar 
= new ArrayList();
            
if (strInnerText.Length > 0)
            {
                
for (int i = 0; i < strInnerText.Length; i++)
                {
                    
//去除掉不需要的字符
                    if (strInnerText[i].Contains("加为好友发站内信"))
                        strInnerText[i] 
= strInnerText[i].Replace("加为好友发站内信""");
                    ar.Add(strInnerText[i]);
                    
//MessageBox.Show(ar[i].ToString());
                    if(i%2!=0)
                        txtinfo.Text 
+= "姓名:"+ar[i].ToString() + "\r\n";
                    
else if (i % 2 == 0 &&ar[i].ToString()!=txtkey.Text.ToString()&&ar[i].ToString()!="")
                        txtinfo.Text 
+= "学校:" + ar[i].ToString() + "\r\n";
                    
else 
                    {
                        txtinfo.Text 
+= "姓名:" + ar[i].ToString() + "\r\n";
                    }
                }
            }
            }
        }

 

 

这样一个简单的页面截取就完成了。接下来继续讨论

posted @ 2009-12-19 23:34  古史漫谈  阅读(661)  评论(1编辑  收藏  举报