VB.NET表單自動提交實現方案剖析
我們曾經在一篇文章中介紹過郵件自動注冊中的修改代理服務器的應用。不過要想實現這一功能的話還需要一個應用的實現,那就是VB.NET表單自動提交。在這里我們就會為大家詳細介紹這一應用技巧。#t#
前些天在網上看到有人需要郵箱自動注冊的程序,于是自己也寫了一個,在查資料的過程中我看到一些網友寫的類似文章,有一些是基于網絡協議,需要了解session,cookie這些東西,對于一個新手來說很繁瑣,等到把這些東西搞懂,熱情也消耗殆盡。vb的優點就在于可以讓那些對于計算機底層不是很了解的人迅速實現自己的程序設計,我找到了一種比較簡單的辦法,要求對HTML標記語言有所了解即可,現在把自己的經驗寫出來于各位網友共享,該方法也許不值一提,也許對您有所幫助。
我的辦法就是利用控件WebBrowser,我想很多人對它都很熟悉,在新建一個工程之后您要做的是添加兩個控件,一個是WebBrowser,另一個是Scriptlet,這兩個控件配合使用,就可以完成這個任務了,Scriptlet中的IHTMLDocument2對象可以用來獲得WebBrowser控件中的HTML文檔。這兩個控件的名字在組件對話框里分別叫Microsoft HTML Object Library和Microsoft Internet Controls。
這兩個控件添加完成之后,你還需要知道WebBrowser的一個事件DocumentComplete,這個事件在整個網頁下載完成之后觸發,也就是說在頁面完成之后這個事件即被執行,有了這些就可以順利的實現注冊了。
下面以eyou網站的免費郵箱注冊為例來實現我的程序設計,新建標準工程后向Form中添加一個WebBrowser控件。所有代碼如下:
- Dim ii As Integer
- Private Sub Form_Load()
- WebBrowser1.Navigate "http://freemail.eyou.com/signup.html?
bgp=%CE%D2%BD%D3%CA%DC&bgp_enable=on"- End Sub
- Private Sub WebBrowser1_DocumentComplete
(ByVal pDisp As Object, URL As Variant)- Dim doc As IHTMLDocument2
- Set doc = WebBrowser1.Document
- Dim tmp As String
- If InStr(doc.body.innerText, "尋找一個新的用戶名") > 0 Then
- tmp = "sdfsdf23" + Trim(Str$(ii))
- doc.All.Item("uid").focus
- SendKeys tmp
- SendKeys "{enter}"
- End If
- If InStr(doc.body.innerText, "輸入您的個人資料") > 0 Then
- doc.All.Item("Password").Value = "123456"
- doc.All.Item("Confirm").Value = "123456"
- doc.All.Item("FirstName").Value = "tomcant"
- doc.All.Item("question").Value = "what is your name"
- doc.All.Item("answer").Value = "my name is ddd"
- doc.All.Item("year").Value = "80"
- doc.All.Item("month").Value = "3"
- doc.All.Item("day").Value = "18"
- doc.All.Item("day").focus
- SendKeys "{enter}"
- End If
- If InStr(doc.body.innerText, "申請郵箱成功") > 0 Then
- iiii = ii + 1
- WebBrowser1.Navigate "http://freemail.eyou.com/signup.html?
bgp=%CE%D2%BD%D3%CA%DC&bgp_enable=on"- End If
- End Sub
Eyou的免費郵箱注冊入口地址為http://freemail.eyou.com/signup.html?bgp=%CE%D2%BD%D3%CA%DC&bgp_enable=on,所以要在Form_load事件中使用WebBrowser控件的Navigate方法。
在eyou的注冊入口頁面完成之后WebBrowser1_DocumentComplete即被執行,在這個函數中主要有三個條件語句,在三個條件語句之前有如下三句:
- Dim doc As IHTMLDocument2
- Set doc = WebBrowser1.Document
- Dim tmp As String
doc定義為IHTMLDocument2對象用以取得WebBrowser1的文檔,tmp字符串是循環注冊中的用戶名,在VB.NET表單自動提交的程序剛開始定義了ii這個integer變量,在每次注冊完成之后ii加1附于tmp之后用以改變用戶名。
第一個條件語句如下:
- If InStr(doc.body.innerText, "尋找一個新的用戶名") > 0 Then
- tmp = "sdfsdf23" + Trim(Str$(ii))
- doc.All.Item("uid").focus
- SendKeys tmp
- SendKeys "{enter}"
- End If
首先判斷是否是注冊入口頁面,通過InStr(doc.body.innerText, "尋找一個新的用戶名") > 0語句實現,doc.body.innerText即取得了該頁面中的所有文字。如果是則構造一個用戶名。
doc.All.Item("uid").focus使用戶名文本框取得焦點,其中uid是該文本框的ID,這個ID的取得是通過查看HTML源代碼得到的,所以要求對HTML標記語言有所了解。使用戶名文本框取得焦點之后通過SendKeys函數模擬鍵盤向文本框發送tmp字符串,這樣用戶名即填寫完成,之后發送回車鍵提交表單。關于SendKeys函數的使用大家可查閱MSDN幫助。
第二個條件語句首先判斷改頁面是否是個人資料填寫頁面,然后填寫個人資料,其方法同填寫用戶名一致,取得個文本框的ID后填寫其值,最后提交表單。
最后一個條件語句判斷郵箱注冊成功后將ii加一,然后將頁面重新定位到注冊入口頁面,至此一個循環完成。
以上VB.NET表單自動提交的代碼即實現了自動注冊提交。