VB做論壇自動發貼軟體
兩種方式:
1.用AxWebBrowser控制元件做論壇自動發貼軟體
2.用HttpWebRequest類做論壇快速發帖器
[@more@]1。用AxWebBrowser控制元件做論壇自動發貼軟體
AxWebBrowser控制元件即VB6中的WebBrowser控制元件。
用AxWebBrowser做論壇批次發貼軟體,使用時先新增對AxWebBrowser控制元件和MSHTML的引用。
先Navigate到指定網址。然後用以下程式碼等待網頁載入完畢:
Do While brow.Busy
Application.DoEvents()
Loop
然後呼叫發帖過程。
Public Sub fill()
On Error Resume Next
Do While brow.Busy
Application.DoEvents()
Loop
Dim webDoc As Object = brow.Document.all
Dim webTag As Object
Dim lengthTag As Integer = webDoc.length - 1
For countTag As Integer= 0 To lengthTag
webTag = webDoc.item(countTag)
Select Case Strings.LCase(webDoc.item(countTag).tagname)
Case "textarea" '網頁中的文字框
Select Case webTag.name
Case "body" '"body"來自網頁原始碼,不同網站很可能不同,你根據實際修改。下同。
webTag.value = strBody '這是預先定義的值,下同。
End Select
Case "select" '網頁中的下拉選擇框
Select Case webTag.name
Case "month" '選擇月份,這裡略去年、日的選擇,因為原理相同。
webTag.all.item(1).selected = True '選擇第一個值
End Select
Case "input" '網頁中的輸入框
Select Case Strings.LCase(webTag.type)
Case "text" '文字
Select Case webTag.name
Case "name", "userid", "nickname" '使用者名稱
webTag.value = strName
Case "subject" '標題
webTag.value = strSubject
Case "regid" '註冊碼
webTag.value = strRegid
Case "username", "realname"
webTag.value = strUsername
Case "cardnumber"
webTag.value = strCardNumber
Case "homephone"
webTag.value = strHomephone '電話號
Case "url_title" '連結名稱
webTag.value = urlTitle
Case "url" '連結
webTag.value = url
Case "email" 'email地址
webTag.value = email
Case "img" '圖片
webTag.value = img
Case "midi" '音樂
webTag.value = midi
Case "year" '年
webTag.value = strYear
Case "prompt" '找回密碼提示問題
webTag.value = strPrompt
Case "answer" '找回密碼答案
webTag.value = strAnswer
End Select
Case "password" '密碼
Select Case webTag.name
Case "passwd", "password", "confirm", "repasswd" '密碼,確認密碼
webTag.value = strPass
End Select
Case "checkbox" '單選框
Select Case webTag.name
Case "emailme" 'email通知tuenhai
webTag.checked = True
End Select
End Select
End Select
Next
brow.Document.forms(0).submit() '許多網頁表單,這一句簡單程式碼即實現自動提交
End Sub
於是,主過程是這樣:
Public Sub autoAdd()
brow.Silent = True '不彈出視窗
brow.Navigate(") ' tuenhai的小站為例
Do While formBrowNetsh.brow.Busy '等待網頁載入完畢
Application.DoEvents()
Loop
Call fill()
End Sub
以上程式碼可實現視覺化自動註冊和論壇自動發帖工具。
還有幾個問題有待解決:
一. 有的網站要填上識別碼數字才能註冊或發言,如何用程式來實現自動識別識別碼圖片上的數字?
二. 有的網站一進去就會跳出一個歡迎對話方塊,程式的執行就被暫停。
三. 對於自動註冊和發言來說,載入較慢的圖片、Flash、音樂等並不是必需的。
2。用HttpWebRequest類做論壇快速發帖器
用HttpWebRequest類做論壇發貼機就簡單多了。
我們始終不能忘記,最好的教程是MSDN,在Microsoft Visual Studio .NET 2003“搜尋”中敲入HttpWebRequest,抄來一些東東(事實上許多教程書籍都是從MSDN上抄的):
名稱空間: System.Net
HttpWebRequest 類對 WebRequest 中定義的屬性和方法提供支援,也對使使用者能夠直接與使用 HTTP 的伺服器互動的附加屬性和方法提供支援。
不要使用 HttpWebRequest 建構函式。使用 WebRequest.Create 方法初始化 HttpWebRequest 的一個新例項。如果 URI 的方案是 http:// 或 https:// ,則 Create 將返回 HttpWebRequest 例項。
GetResponse 方法向 RequestUri 屬性中指定的 Internet 資源發出同步請求並返回包含該響應的 HttpWebResponse 例項。可以使用 BeginGetResponse 和 EndGetResponse 方法對 Internet 資源發出非同步請求。
當要向 Internet 資源傳送資料時, GetRequestStream 方法返回用於傳送資料的 Stream 例項。 BeginGetRequestStream 和 EndGetRequestStream 方法提供對傳送資料流的非同步訪問。
如果在訪問 Internet 資源時發生錯誤,則 HttpWebRequest 類將引發 WebException 。 WebException.Status 屬性是 WebExceptionStatus 值之一,它指示錯誤源。當 WebException.Status 為 WebExceptionStatus.ProtocolError 時, Response 屬性包含從 Internet 資源接收的 HttpWebResponse 。
Shared Sub postData()
Dim httpUrl As New System.Uri(" & "name=yourName&pass=yourPass&cardnumber=yourCardNumber")
Dim req As HttpWebRequest
'req.Timeout = 10000 '設定超時值10秒
req = CType(WebRequest.Create(httpUrl2), HttpWebRequest)
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
Dim bytesData() As Byte = System.Text.Encoding.ASCII.GetBytes(""name=yourName&pass=yourPass&cardnumber=yourCardNumber")
req.ContentLength = bytesData.Length
Dim postStream As Stream = req.GetRequestStream()
postStream.Write(bytesData, 0, bytesData.Length) '以上向伺服器post資訊。
Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse) '以下獲取伺服器返回資訊
Dim reader As StreamReader = _
New StreamReader(res.GetResponseStream, System.Text.Encoding.GetEncoding("GB2312"))
Dim respHTML As String = reader.ReadToEnd()
MsgBox(respHTML) '這就是向網路伺服器post後返回的資訊
MsgBox(res.StatusCode.ToString) '向網路伺服器post後返回的狀態碼
res.Close() '關閉
End Sub
用AxWebBrowser控制元件做論壇發貼機留有三個問題,用HttpWebRequest類來實現,後二個問題都不復存在。而且,用HttpWebRequest類來實現論壇發帖器的速度要快得多。但是,同樣的?
有的網站要填上識別碼數字才能註冊或發言,如何用“論壇自動發貼機”來實現自動識別識別碼圖片上的數字?
我們在主過程里加上執行緒,因為我們以後要用多執行緒做自動發帖機啊。用多執行緒做論壇自動發貼器在VB6中不好實現,在VB.NET中做自動發帖工具卻不難。
Dim threadAdd As System.Threading.Thread '定義執行緒
Public Sub threadAutoAdd()
threadAdd= New System.Threading.Thread(AddressOf postData) '建立執行緒例項
threadNetsh.Start() '開始執行緒
'別忘了在Sub postData()的最後加上threadAutoAdd.Abort()來關閉執行緒
'或者在這裡加上判斷Sub postData()完畢的程式碼,如果完畢就關閉執行緒
End Sub
用HttpWebRequest類做論壇發貼機就簡單多了。
我們始終不能忘記,最好的教程是MSDN,在Microsoft Visual Studio .NET 2003“搜尋”中敲入HttpWebRequest,抄來一些東東(事實上許多教程書籍都是從MSDN上抄的):
名稱空間: System.Net
HttpWebRequest 類對 WebRequest 中定義的屬性和方法提供支援,也對使使用者能夠直接與使用 HTTP 的伺服器互動的附加屬性和方法提供支援。
不要使用 HttpWebRequest 建構函式。使用 WebRequest.Create 方法初始化 HttpWebRequest 的一個新例項。如果 URI 的方案是 http:// 或 https:// ,則 Create 將返回 HttpWebRequest 例項。
GetResponse 方法向 RequestUri 屬性中指定的 Internet 資源發出同步請求並返回包含該響應的 HttpWebResponse 例項。可以使用 BeginGetResponse 和 EndGetResponse 方法對 Internet 資源發出非同步請求。
當要向 Internet 資源傳送資料時, GetRequestStream 方法返回用於傳送資料的 Stream 例項。 BeginGetRequestStream 和 EndGetRequestStream 方法提供對傳送資料流的非同步訪問。
如果在訪問 Internet 資源時發生錯誤,則 HttpWebRequest 類將引發 WebException 。 WebException.Status 屬性是 WebExceptionStatus 值之一,它指示錯誤源。當 WebException.Status 為 WebExceptionStatus.ProtocolError 時, Response 屬性包含從 Internet 資源接收的 HttpWebResponse 。
Shared Sub postData()
Dim httpUrl As New System.Uri(" & "name=yourName&pass=yourPass&cardnumber=yourCardNumber")
Dim req As HttpWebRequest
'req.Timeout = 10000 '設定超時值10秒
req = CType(WebRequest.Create(httpUrl2), HttpWebRequest)
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
Dim bytesData() As Byte = System.Text.Encoding.ASCII.GetBytes(""name=yourName&pass=yourPass&cardnumber=yourCardNumber")
req.ContentLength = bytesData.Length
Dim postStream As Stream = req.GetRequestStream()
postStream.Write(bytesData, 0, bytesData.Length) '以上向伺服器post資訊。
Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse) '以下獲取伺服器返回資訊
Dim reader As StreamReader = _
New StreamReader(res.GetResponseStream, System.Text.Encoding.GetEncoding("GB2312"))
Dim respHTML As String = reader.ReadToEnd()
MsgBox(respHTML) '這就是向網路伺服器post後返回的資訊
MsgBox(res.StatusCode.ToString) '向網路伺服器post後返回的狀態碼
res.Close() '關閉
End Sub
用AxWebBrowser控制元件做論壇發貼機留有三個問題,用HttpWebRequest類來實現,後二個問題都不復存在。而且,用HttpWebRequest類來實現論壇發帖器的速度要快得多。但是,同樣的?
有的網站要填上識別碼數字才能註冊或發言,如何用“論壇自動發貼機”來實現自動識別識別碼圖片上的數字?
我們在主過程里加上執行緒,因為我們以後要用多執行緒做自動發帖機啊。用多執行緒做論壇自動發貼器在VB6中不好實現,在VB.NET中做自動發帖工具卻不難。
Dim threadAdd As System.Threading.Thread '定義執行緒
Public Sub threadAutoAdd()
threadAdd= New System.Threading.Thread(AddressOf postData) '建立執行緒例項
threadNetsh.Start() '開始執行緒
'別忘了在Sub postData()的最後加上threadAutoAdd.Abort()來關閉執行緒
'或者在這裡加上判斷Sub postData()完畢的程式碼,如果完畢就關閉執行緒
End Sub
3。獲取 IE 當前 URL 的程式碼,網上有許多類似程式碼,但在WINDOWSXP 下不能執行。查了一些資料,發現由於Win2000,WINXP 是基於Unicode程式碼的作業系統,所以沒有WorkerA類,而以WorkerW類取而代之(XXXXA should be used on not unicode compliant windows oses likes Windows 95,98 etc and on unicode enabled oses replace A with W. Remember WorkerA or WorkerW doesn't have something related to IE version. To obtain all of the opened IEs URL use EnumWindows callback function and cheers. )。
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 'Findwindow函式的功能是找到當前執行的IE視窗的url地址的控制程式碼
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long 'FindwindowEx函式的功能是找到子窗體的控制程式碼
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const WM_GETTEXT = &HD
Private Sub Command1_Click()
getcurrenturl
End Sub
Sub getcurrenturl(Optional ByRef URL As String)
Dim hwnd As Long '設定一個長整形變數用來接收函式返回值
hwnd = 0 '初始化
hwnd = FindWindowEx(hwnd, 0, "IEFrame", vbNullString) 'IE視窗控制程式碼
hwnd = FindWindowEx(hwnd, 0, "Workerw", vbNullString) 'IE視窗的工作區控制程式碼
hwnd = FindWindowEx(hwnd, 0, "ReBarWindow32", vbNullString) 'IE視窗的選單欄控制程式碼
hwnd = FindWindowEx(hwnd, 0, "ComboBoxEx32", vbNullString) 'IE視窗下拉選單控制程式碼
hwnd = FindWindowEx(hwnd, 0, "ComboBox", vbNullString) 'IE視窗下拉選單當前項控制程式碼
hwnd = FindWindowEx(hwnd, 0, "Edit", vbNullString) ''IE視窗下拉選單編輯框控制程式碼
URL = String(1024, Chr(0)) '初始化字串
SendMessageByString hwnd, WM_GETTEXT, 1025, URL '向系統傳送獲得IE窗體位址列中的字串命令
URL = Split(URL, Chr(0))(0) '根據 URL 長度得到 URL 值
MsgBox URL '顯示IE當前網址
End Sub
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 'Findwindow函式的功能是找到當前執行的IE視窗的url地址的控制程式碼
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long 'FindwindowEx函式的功能是找到子窗體的控制程式碼
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const WM_GETTEXT = &HD
Private Sub Command1_Click()
getcurrenturl
End Sub
Sub getcurrenturl(Optional ByRef URL As String)
Dim hwnd As Long '設定一個長整形變數用來接收函式返回值
hwnd = 0 '初始化
hwnd = FindWindowEx(hwnd, 0, "IEFrame", vbNullString) 'IE視窗控制程式碼
hwnd = FindWindowEx(hwnd, 0, "Workerw", vbNullString) 'IE視窗的工作區控制程式碼
hwnd = FindWindowEx(hwnd, 0, "ReBarWindow32", vbNullString) 'IE視窗的選單欄控制程式碼
hwnd = FindWindowEx(hwnd, 0, "ComboBoxEx32", vbNullString) 'IE視窗下拉選單控制程式碼
hwnd = FindWindowEx(hwnd, 0, "ComboBox", vbNullString) 'IE視窗下拉選單當前項控制程式碼
hwnd = FindWindowEx(hwnd, 0, "Edit", vbNullString) ''IE視窗下拉選單編輯框控制程式碼
URL = String(1024, Chr(0)) '初始化字串
SendMessageByString hwnd, WM_GETTEXT, 1025, URL '向系統傳送獲得IE窗體位址列中的字串命令
URL = Split(URL, Chr(0))(0) '根據 URL 長度得到 URL 值
MsgBox URL '顯示IE當前網址
End Sub
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/82387/viewspace-902982/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播軟體開發,自動滾動banner
- 軟體測試理論(2)自動化測試
- 自寫簡單英文論壇!
- 可以發外鏈的論壇,哪些論壇可以發外鏈?
- 科技創新、驅動發展——2023軟體供應鏈安全創新發展論壇順利召開
- iOS App 效能資料自動化收集討論、徵集貼iOSAPP
- VB 獲取剪貼簿的內容
- Dharma 勒索軟體的原始碼在駭客論壇開售原始碼
- 軟通動力"工業軟體雲:製造業數字化轉型的核心驅動力"分論壇落幕
- TurboCollage 照片拼貼軟體
- 軟體UI自動化測試應該怎麼做?對軟體產品起到什麼作用?UI
- 【GUI軟體開發】小紅書評論採集:自動採集1w多條,含二級評論!GUI
- 做自媒體需要的軟體有哪些?這個軟體你肯定用過!
- 倒數計時 | 2021 OWASP中國軟體開發與供應鏈安全技術論壇
- 資訊化和軟體服務業司參加工業網際網路平臺與軟體化發展高峰論壇
- 預告 | 派拉軟體茆正華將參與零信任產業協同發展圓桌論壇討論產業
- TurboCollage for Mac(照片拼貼軟體)Mac
- 直播平臺軟體開發,Extjs Grid自動換行JS
- 2017(第二屆)工業軟體與製造業融合發展高峰論壇即將召開
- 自動化清理軟體:Hazel for MacMac
- 快手自動私信軟體引流工具
- gin自動路由中介軟體路由
- 怎麼查到使用者IP地址如微博貼吧論壇等作者!
- 影像自動拼貼製作工具
- 影片號直播自動迴圈發評論-自動回覆評論 - 瀏覽器外掛瀏覽器
- 如何阻止電腦自動安裝垃圾軟體 怎麼禁止流氓軟體自動安裝
- 新手做自媒體,最好掌握這4款影片製作軟體
- 直播平臺軟體開發,flutter Wrap 自動換行元件Flutter元件
- 量化機器人開發,自動掛單交易軟體搭建機器人
- 軟體工程方法論對軟體開發有多大的用處?軟體工程
- 怎麼做能列印發票的軟體?
- 電腦自動安裝軟體怎麼解決 怎麼禁止流氓軟體自動安裝
- 2017第八屆CSTQB國際軟體測試高峰論壇圓滿召開
- Discuz!論壇搭建
- 直播軟體app開發,左右自動滑動的輪播圖廣告APP
- Eggplant—HMI自動化測試軟體
- Eggplant—HMI 自動化測試軟體
- 通用自動化測試軟體 — TAE
- 軟體測試:自動化測試