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