用 VB 實現表單的自動提交 (轉)

worldblog發表於2007-08-16
用 VB 實現表單的自動提交 (轉)[@more@]

【序】

 以摩托羅拉的九月大獎賽為例,下面介紹用 VB 實現帶校驗碼的網頁表單的自動提交。我們現看看摩托羅拉的投票頁面:?id={525147E1-C4A7-41EE-9190-95800AC81E29}" target=_blank>{525147E1-C4A7-41EE-9190-95800AC81E29}


 如果要對投票的話就必須先填寫驗證碼!由於驗證碼是圖片,而且是隨即的,所以對自動提交資料增加了很大的難度。因此,如果要提交投票就必須先得到驗證碼!

 難點:(1)取得驗證碼圖片並識別成相應資料;(2)提交資料表單。

 首先我們來剖析一下本頁面的 HTML ,程式碼如下:

 … …


 
 value="{525147E1-C4A7-41EE-9190-95800AC81E29}">
 
 
 
 
請輸入4位數字驗證碼: 用 VB 實現表單的自動提交 (轉)

value="投 票">value="關 閉" onClick="script:window.close()">

 … …


為了保證程式碼的易讀性,進行了相應的處理,並省略了部分無用的程式碼!不難看出的是:

 (1)表單的名稱是:form1 ; 提交的頁面是:Photo_Vote.asp ; 提交方式是:Post
 (2)表單提交的資料有:id 和 CheckCode 。其中 id 為隱藏域,內容是:{525147E1-C4A7-41EE-9190-95800AC81E29}
 (3)驗證碼的圖片為:count.asp?sksid=624BE861D1FF9641DE7F1D1FF967C1E711D1FF95CD5E9B1D1FF9|3812D0|1AF2D7 它是由 Count.asp 隨即動態生成,存在不確定性!
 (4)在網頁的驗證碼的圖片上按右鍵,儲存圖片時顯示為:Count.XBM 即圖片的格式為:XBM

 透過上面的分析,問題就可以一個一個解決了。

 

【表單的提交】


 表單的提交有幾種方式,常用的有兩種:一是直接提交含表單提交資料的網址;二是修改原表單,然後提交新資料!
 對於第一種,我們在得到驗證碼後可以這樣傳送:{525147E1-C4A7-41EE-9190-95800AC81E29}&CheckCode=6793 然而由於摩托羅拉的網站對  進行了操作,這樣做起來不是很好,而且也難成功,所以我們直能改用第二種方法,修改原有的表單。
 首先,利用 Browers 取得網頁原始碼(具體方法,請參考:tips/showdoc.asp?detail_id=1337" target=_blank>http://www.cndevx.com/tips/showdoc.asp?detail_id=1337)利用VB中的 Replace 將原表單網頁的程式碼修改成:
 … …


 
 value="{525147E1-C4A7-41EE-9190-95800AC81E29}">
 
 
 
 
請輸入4位數字驗證碼: value=6739>用 VB 實現表單的自動提交 (轉)


value="關 閉" onClick=":window.close()">


 … …


 然後利用 Webbrowers.Document.write HTMLCodes 方式,講替換的 HTML 程式碼重新寫入 Webbrowers 控制元件裡面, Webbrowers 控制元件將自動執行新的程式碼,即自動提交了資料!

 這樣,整個提交過程就自動完成了,如果我們再加上相應的時間控制或者其他網站的話,就可以實現自動重新整理和訊息群發了!

 

【XBM 圖片檔案】

 XBM(X BitMap)一種圖形檔案格式

 檔案結構類似如下:
#define counter_width 32 //定義圖片寬(象素)
#define counter_height 10 //定義圖片高(象素)
static unsigned char counter_bits[]={
0x3c,0x3c,0xfe,0x3c,0x66,0x66,0xfe,0x66,0xc3,0xc3,0x06,0x60,0x66,0x66,0x06,0x60,0x3c,0x3c,0x3e,0x30,0x66,0x66,0x60,0x18,0xc3,0xc3,0xc0,0x0c,0xc3,0xc3,0xc3,0x06,0x66,0x66,0x66,0x06,0x3c,0x3c,0x3c,0x7e}; //影像資料,採取16進位制格式的,還原影像時需轉換成二進位制後資料反向,否則圖片將是反的

 得到 XBM 圖片,分離成相應的字元,然後與預先的圖片檔案比較,即可得出此影像代表的數字,即所謂的識別!

  演示:UPLOADfile/941042070557.rar">http://www.cndevx.com/club/uploadfile/2003941042070557.rar

  源 代 碼:http://www.cndevx.com/club/uploadfile/20039410421872749.rar

 

=========================
附:使用VB獲得一頁的HTML程式碼

加入WebBrowser、Timer、Commanutton控制元件各一個,然後使用以下程式碼:

Private Sub Command1_Click()
 WebBrowser1.Navigate "{525147E1-C4A7-41EE-9190-95800AC81E29}"
 Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
 Dim doc, objhtml As 
 Dim i As Integer
 Dim strhtml As String
 
 If Not WebBrowser1.Busy Then
 Set doc = WebBrowser1.Document
 i = 0
 Set objhtml = doc.body.createtextrange()
 If Not IsNull(objhtml) Then
 Text1.Text = objhtml.htmltext
 End If
 Timer1.Enabled = False
 End If
End Sub 

 這是網上流行的一種方法,但是從我使用來看,因為 WebBrowers 控制元件本身有 DocumentComplete 事件,也就是說並不需要使用 Timer 控制元件!

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-962200/,如需轉載,請註明出處,否則將追究法律責任。

相關文章