C# WebBroswer读取html页面元素

前面的几个示例都 是对页面中的某一控件进行读取,而有时有些页面没有input控件,而只有一些常用页面元素,对于这样的页面读取就要换一种方式了:

这里就要用到HtmlDocument中的GetElementsByTagName方法,如果我们要读取某一页面中的第一个<a></a>可以这样使用:doc.GetElementsByTagName("a")[0];后面的就是索引的设定了;用的多了也就不觉得有什么内容了,直接上代码(电信的号码查询):

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Linq;
using  System.Text;
using  System.Windows.Forms;
using  System.Security.Cryptography;
using  System.Web;


namespace  电信查询
{
    
public   partial   class  Form1 : Form
    {
        
// WebService引用
         private  objTele.Service1SoapClient objtele  =   new  电信查询.objTele.Service1SoapClient();
        
// 当前查询号码
         private   string  nowtnum  =   "" ;
        
// 当前查询ID
         private   string  nowtid  =   "" ;
        
// 当前用户余额
         private   string  nowtmoney  =   "" ;

        
// 当前用户名称
         private   string  nowtname  =   "" ;

        
// 上一个用户名
         private   string  oldtname  =   "" ;
        
// 上一个查询号码
         private   string  oldtnum  =   "" ;
        
// 上一个查询ID
         private   string  oldtid  =   "" ;
        
// 上一用户余额
         private   string  oldtmoney  =   "" ;
        
// 刷新页面次数
         private   int  islock  =   0 ;
        
public  Form1()
        {
            InitializeComponent();
        }

        
private   void  tspstart_Click( object  sender, EventArgs e)
        {
            
if  (cbbtime.Text  !=   "" )
            {
                
if  (tspstart.Text  ==   " 开始查询 " )
                {
                    timer1.Interval 
=  Convert.ToInt32(cbbtime.Text.ToString().Trim());
                    timer1.Enabled 
=   true ;
                    tspstart.Text 
=   " 停止查询 " ;
                }
                
else
                {
                    tspstart.Text 
=   " 开始查询 " ;
                    timer1.Enabled 
=   false ;
                    timer2.Enabled 
=   false ;
                }
            }
            
else
            {
                MessageBox.Show(
" 请先设定查询时间间隔 " " 错误提示 " , MessageBoxButtons.OK, MessageBoxIcon.Error);
                
return ;
            }
        }

        
private   void  cbbtime_SelectedIndexChanged( object  sender, EventArgs e)
        {
            
if  (cbbtime.Text  !=   "" )
            {
                timer1.Interval 
=  Convert.ToInt32(cbbtime.Text.ToString().Trim());
            }
        }

        
private   void  Form1_Load( object  sender, EventArgs e)
        {
            webpage.Url 
=   new  Uri( " http://www.1065921611.com/ " );
            lvorder.Columns.Add(
" 编号 " 40 );
            lvorder.Columns.Add(
" 号码 " 80 );
            lvorder.Columns.Add(
" 姓名 " 80 );
            lvorder.Columns.Add(
" 用户余额 " 80 );
            lvorder.Columns.Add(
" 状态 " 120 );
            lvorder.Columns.Add(
" 时间 " 120 );
            lvorder.GridLines 
=   true // 显示表格线
            lvorder.View  =  View.Details; // 显示表格细节
            lvorder.HeaderStyle  =  ColumnHeaderStyle.Clickable; // 对表头进行设置
            lvorder.FullRowSelect  =   true ; // 是否可以选择行
            cbbtime.Text  =   " 5000 " ;
            
this .Text  =   " 电信查询 " ;
        }

        
private   void  timer1_Tick( object  sender, EventArgs e)
        {
            
string  strtele  =   "" ;
            
try
            {
                
// 从数据库中查询一条等待查询的数据
                strtele  =  objtele.selectOneSelectStratMobile(Encrypt(),  " 2 " );
                
if  (strtele  !=   "" )
                {
                    
string [] stroder  =  strtele.Split( new   string [] {  " _ "  }, StringSplitOptions.RemoveEmptyEntries);
                    
if  (stroder[ 0 !=   " 0 "   &&  stroder[ 1 !=   " 0 " )
                    {
                        
try
                        {
                            HtmlDocument doc 
=  webpage.Document.Window.Frames[ 1 ].Document.Window.Frames[ 3 ].Document.Window.Frames[ 0 ].Document;
                            HtmlElement telenum 
=  doc.All[ " chargePhone " ];
                            HtmlElement submit 
=  doc.GetElementsByTagName( " a " )[ 0 ];
                            nowtid 
=  stroder[ 0 ].ToString().Trim();
                            nowtnum 
=  stroder[ 1 ].ToString().Trim();
                            nowdo.Text 
=   " 正在查询用户: "   +  nowtnum.ToString()  +   " 信息 " ;
                            
if  (telenum  ==   null   ||  submit  ==   null )
                            {
                                nowdo.Text 
=   " 网络受阻查询用户: "   +  nowtnum.ToString()  +   " 信息失败 " ;
                                databind(nowtid.ToString(), nowtnum.ToString(), 
" 查询失败 " " 0 " " 网络受阻,查询失败 " 9 );
                                
return ;
                            }
                            telenum.SetAttribute(
" value " , stroder[ 1 ].ToString());
                            submit.InvokeMember(
" click " );
                            timer1.Enabled 
=   false ;
                            timer2.Enabled 
=   true ;
                            timer2.Interval 
=   2000 ;
                            islock 
=   0 ;
                        }
                        
catch  (Exception)
                        {
                            
return ;
                        }
                    }
                }
            }
            
catch  (Exception)
            {

                
throw ;
            }
        }

        
// 页面加载完成时发生
         private   void  webpage_DocumentCompleted( object  sender, WebBrowserDocumentCompletedEventArgs e)
        {

        }
        
// 页面开始刷新时执行
         private   void  webpage_Navigated( object  sender, WebBrowserNavigatedEventArgs e)
        {

        }

        
///   <summary>  
        
///  加密数据 
        
///   </summary>  
        
///   <returns></returns>  
         public   static   string  Encrypt()
        {
            
string  Text  =   " asuygp834p8934g8ye893rehfvasu78698734r " ;
            
string  sKey  =   " as4564656uygp834p893 " ;
            DESCryptoServiceProvider des 
=   new  DESCryptoServiceProvider();
            
byte [] inputByteArray;
            inputByteArray 
=  Encoding.Default.GetBytes(Text);
            des.Key 
=  ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,  " md5 " ).Substring( 0 8 ));
            des.IV 
=  ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,  " md5 " ).Substring( 0 8 ));
            System.IO.MemoryStream ms 
=   new  System.IO.MemoryStream();
            CryptoStream cs 
=   new  CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 
0 , inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret 
=   new  StringBuilder();
            
foreach  ( byte  b  in  ms.ToArray())
            {
                ret.AppendFormat(
" {0:X2} " , b);
            }
            
return  ret.ToString();
        }

        
private   void  timer2_Tick( object  sender, EventArgs e)
        {

            
if  (islock  <   10   &&   ! timer1.Enabled)
            {
                
if  (islock  ==   0   || islock == 3 || islock == 6 )
                {
                    
try
                    {
                        HtmlDocument doc 
=  webpage.Document.Window.Frames[ 1 ].Document.Window.Frames[ 3 ].Document.Window.Frames[ 1 ].Document;
                        HtmlElement subref 
=  doc.GetElementsByTagName( " a " )[ 0 ];
                        
if  (subref  ==   null )
                        {
                            HtmlDocument doc1 
=  webpage.Document.Window.Frames[ 1 ].Document.Window.Frames[ 3 ].Document.Window.Frames[ 1 ].Document;
                            subref 
=  doc1.GetElementsByTagName( " a " )[ 0 ];
                        }
                        subref.InvokeMember(
" click " );
                    }
                    
catch  (Exception)
                    {
                        
return ;
                    }
                }
                
else
                {
                    
try
                    {
                        HtmlDocument doc 
=  webpage.Document.Window.Frames[ 1 ].Document.Window.Frames[ 3 ].Document.Window.Frames[ 1 ].Document;
                        
string  userresult  =  doc.GetElementsByTagName( " div " )[ 6 ].GetElementsByTagName( " ol " )[ 0 ].InnerText.ToString();
                        
string [] userinfo  =  userresult.Split( new   string [] {  "   "  }, StringSplitOptions.RemoveEmptyEntries);
                        
if  (userinfo.Length  ==   4 )
                        {
                            
if  (userinfo[ 2 ].ToString().Trim()  ==  nowtnum.ToString())
                            {
                                timer1.Enabled 
=   true ;
                                timer2.Enabled 
=   false ;
                                nowtname 
=  userinfo[ 1 ].ToString().Trim();
                                nowtmoney 
=  userinfo[ 3 ].ToString().Trim();
                                oldtid 
=  nowtid.ToString();
                                oldtmoney 
=  nowtmoney;
                                oldtname 
=  nowtname;
                                oldtnum 
=  nowtnum;
                                nowdo.Text 
=   " 查询用户: "   +  nowtnum.ToString()  +   " 信息成功 " ;
                                databind(nowtid, nowtnum, nowtname, nowtmoney, 
" 查询成功 " 8 );
                            }
                        }
                       
                    }
                    
catch  (Exception)
                    {
                        islock
++ ;
                        
return ;
                    }
                }
                islock
++ ;
            }
            
else
            {
                nowdo.Text 
=   " 查询用户: "   +  nowtnum.ToString()  +   " 信息失败 " ;
                nowtname 
=   " 查询失败 " ;
                nowtmoney 
=   " 0 " ;
                oldtid 
=  nowtid.ToString();
                oldtmoney 
=  nowtmoney;
                oldtname 
=  nowtname;
                oldtnum 
=  nowtnum;
                timer1.Enabled 
=   true ;
                timer2.Enabled 
=   false ;
                databind(nowtid, nowtnum, 
" 无号码信息 " " 0 " " 无响应查询失败 " 9 );
            }
        }
        
///   <summary>
        
///  联通充值数据信息状态更新
        
///   </summary>
        
///   <param name="ormd">  信息编号 </param>
        
///   <param name="ormn"> 号码 </param>
        
///   <param name="ormoney"> 金额 </param>
        
///   <param name="state"> 状态 </param>
        
///   <param name="n"> 状态标识 </param>
         private   void  databind( string  ormd,  string  ormn,  string  name,  string  money,  string  state,  int  n)
        {
            
bool  id  =   false ;
            objTele.SelectTelecom sTele 
=   new  电信查询.objTele.SelectTelecom();
            sTele.sctId 
=  Convert.ToInt32(ormd.Trim());
            sTele.sctName 
=  name;
            sTele.sctExecTime 
=  DateTime.Now;
            sTele.sctState 
=  n;
            sTele.sctRemainAmount 
=  Convert.ToDecimal(money.ToString());
            
try
            {
                id 
=  objtele.updateOneSelectTelecom(Encrypt(), sTele);
                
if  ( ! id)
                    id 
=  objtele.updateOneSelectTelecom(Encrypt(), sTele);

            }
            
catch  (Exception)
            {
            }

            ListViewItem[] listViewItem 
=   new  ListViewItem[ 1 ];
            listViewItem[
0 =   new  ListViewItem( new   string [] { ormd, ormn, name, money  +   " " , state,DateTime.Now.ToString() });
            lvorder.Items.AddRange(listViewItem);

        }
    }
}

 

 

转载于:https://www.cnblogs.com/gjs85/archive/2010/02/04/1663789.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值