[VB6]自動登陸網路站點詳解(二):Inet控制項與WebBrowser控制項配合使用

  • 7859
  • 0

摘要:[VB6]自動登陸網路站點詳解(二):Inet控制項與WebBrowser控制項配合使用

 

 

URL

帳號

密碼

其他參數

SOHU郵箱

http://login.sohu.com/chkpwd.php

UserName

Password

 

網易通行證

http://reg4.163.com/CheckUser.jsp

username

password

 

CSDN通行證

http://www.csdn.net/member/logon.asp

login_name

password

cookietime=0&

x=42&y=10

表格中的參數就是按照前面介紹的方法得到的,在程式中將要用到。

先說明一點, WebBrowser也是可以直接POST資料給Web伺服器的,我將在第四部分給出代碼。這裏先看看InetWebBrowser相互配合的效果。

新建一個工程,部件中勾選中“Microsoft Internet Transfer Controls 6.0、“Microsoft Internet Controls”,依次添加Inet1WebBrowser1Text1Text2Combo1在表單上,可以把WebBrowser1適當拉大一點,將各控制項位置安排好(可以參考運行後的圖片),下面是代碼:

    Dim URL1(2) As String:  Dim URL2(2) As String

    Dim C1(2) As String: Dim C2(2) As String: Dim C3(2) As String

Private Sub Form_Load()

       Text1.Text = ""

    Text2.Text = ""

    Text2.PasswordChar = "*"

    Combo1.AddItem "SOHU郵箱", 0

    Combo1.AddItem "網易通行證", 1

    Combo1.AddItem "CSDN通行證", 2

    Combo1.AddItem "請選擇一個登陸", 3

    Combo1.Text = Combo1.List(3)

    URL1(0) = "http://login.sohu.com/chkpwd.php": URL2(0) = "http://www34.mail.sohu.com/control/entry"

    URL1(1) = "http://reg4.163.com/CheckUser.jsp": URL2(1) = "http://reg4.163.com/Main.jsp?"

    URL1(2) = "http://www.csdn.net/member/logon.asp": URL2(2) = "http://www.csdn.net/Member/Passport.asp"

    C1(0) = "UserName": C2(0) = "Password": C3(0) = ""

    C1(1) = "username": C2(1) = "password": C3(1) = ""

    C1(2) = "login_name": C2(2) = "password": C3(2) = "cookietime=0&x=42&y=10"

End Sub

Private Sub Form_Resize()

If Me.WindowState <> 1 Then

    WebBrowser1.Left = 10

    WebBrowser1.Width = Me.Width - 120

    WebBrowser1.Height = Me.Height - 800

End If

End Sub

Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)

    If KeyCode <> 13 Then Exit Sub

    If Combo1.ListIndex = 3 Then MsgBox "請選擇一個登陸": Exit Sub

    If Text1.Text = "" Then MsgBox "請輸入用戶名": Exit Sub

    If Text2.Text = "" Then MsgBox "請輸入密碼": Exit Sub

    Dim strFormData As String

    strFormData = C1(Combo1.ListIndex) + "=" + Text1.Text + "&" + C2(Combo1.ListIndex) + "=" + Text2.Text + "&" + C3(Combo1.ListIndex)

    Inet1.Execute URL1(Combo1.ListIndex), "Post", strFormData, "Content-Type: application/x-www-form-urlencoded "

    Do Until Inet1.StillExecuting = False '這裏阻塞前面的Inet1,確保登陸成功之後再取頁面,你可以將此Do取消了試一次。

        DoEvents

    Loop

    If Combo1.ListIndex = 1 Then

        WebBrowser1.Navigate URL2(Combo1.ListIndex) + C1(Combo1.ListIndex) + "=" + Text1.Text

    Else

        WebBrowser1.Navigate URL2(Combo1.ListIndex)

    End If

End Sub

 

大家可以挑選一個自己已經註冊過的站點看看效果。

可以看到,登陸成功之後, InetWebBrowser是可以保持住同一個Session對話的!不過當我們在WebBrowser中顯示出來的頁面上點擊了一個連接之後,請求卻不能成功(請讀者自己試一下,在登陸成功的站點中任意點擊一個與用戶相關的連接,彈出來的將是一個“你沒有登陸”的頁面)。為什麼?

因為我們現在點擊的連接還是使用IE(作業系統默認的流覽器)打開的,而IE請求頁面的時候使用的是伺服器新發送過來的Session,這個新的Session與你在WebBrowser中使用的Session也就是身份ID不一樣,至少伺服器是這麼認為的,它以為是另一個沒有登陸的用戶。所以說Session的作用範圍不是對整個客戶機的,通過實際的代碼可以很好的理解這一點。(可以利用這一點,使用代碼在一台電腦上實現兩個以上的用戶同時登陸,甚至還能對同一主題進行無縫發言。)

所以接下來我們要使頁面繼續停在WebBrowser中顯示。因為很顯然,既然WebBrowserInet是可以保持住同一個Session對話的,那麼WebBrowserWebBrowser內部自然也是可以的!

要添加的代碼很簡單——

Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)

    Dim frm2 As New Form2

    frm2.WebBrowser1.RegisterAsBrowser = True

    Set ppDisp = frm2.WebBrowser1.Object

    frm2.Show

End Sub

然後在工程中添加一個Form2,上面再放一個WebBrowser1,調整好位置,Form2的代碼視窗添加上以下代碼:

Private Sub Form_Load()

WebBrowser1.Silent = True

End Sub

 

Private Sub Form_Resize()

If Me.WindowState <> 1 Then

    WebBrowser1.Left = 10

    WebBrowser1.Width = Me.Width - 120

    WebBrowser1.Height = Me.Height - 600

End If

End Sub

Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)’這裏為了避免在Form1中同樣發生的事情。

    Dim frm2 As New Form2

    frm2.WebBrowser1.RegisterAsBrowser = True

    Set ppDisp = frm2.WebBrowser1.Object

    frm2.Show

End Sub

利用Inet發送登陸請求,WebBrowser流覽實際頁面,的確是個很不錯的構思,在登陸站點相對教少的情況下應該是沒有什麼問題的。但是這也會使事情變得更加複雜。除了不能缺少的POST位址(URL1)、帳號參數(C1)、密碼參數(C2)、其他參數(C3)之外,還必須要有供WebBrowser請求流覽的頁面位址參數(URL2)。 雖然只是多了一個參數,但卻添加了很多麻煩(比如網易郵箱的請求頁面是根據用戶的帳號名自動生成的,不固定)。只有利用WebBrowser直接POST資料才能避免第四個參數。但是流覽器的介面以及功能卻是一個比較麻煩的問題(除非你不嫌麻煩,自己再動手寫一個)。