国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

用VB.NET做個論壇發帖軟件

2024-07-10 13:00:29
字體:
來源:轉載
供稿:網友

作者:tuenhai.com msn: king#tuenhai.com

版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明
http://www.tuenhai.com/

  題記:如果你經常泡各種論壇發表宏論,如果您想把您的軟件在極短時間內提交到有關網站,如果您想把您的網站快速登陸各搜索引擎,如果您想做個論壇自動發貼軟件,本篇文章可能對您有所幫助。

   開發工具:microsoft visual studio .net 2003
   操作系統:windows xp

                  不編程實現自動發帖                  

  不編程也能實現論壇自動發貼?
  答案肯定的。2003年10月前,tuenhai還未學習編程(vb6),但tuenhai已經實現論壇自動發帖器。雖然現在tuenhai已不用這種方法,但可能對有些朋友有用,還是在此介紹一下實現方法。
  實現原理是:借用模擬鍵盤、鼠標操作的軟件,抓取輸入框座標,然后模擬移動鼠標到指定座標,模擬鍵盤輸入字符,模擬回車或點擊相應位置完成自動發貼。當然,你得編寫相應自動化腳本,雖有一點難度,但對于編程來說,應該是簡單的。
  有三個模擬鍵盤、鼠標類軟件,功能比較好,在《vs.net學習方法論》http://www.tuenhai.com/已經有所介紹。
  一. pcworker(http://www.pcworker.net)
   pcworker功能極多,更重要的是,pcworker中的腳本代碼都是看得懂的代碼:

press vk_f1 // 模擬按 f1 鍵 press vk_ctrl+vk_f // 模擬按 ctrl + f 鍵

  是不是不太難?

  二. “按鍵精靈”(http://www.vrbrothers.com/cn/qmacro)
  相對來說,按鍵精靈容易使用,但只有pcworker的少部分功能。比如pcworker可輸出隨機數,按鍵精靈就不行。
  按鍵精靈的腳本代碼不太容易看懂,比如
  keypress 82 1
   您看得出按的是哪個鍵嗎?

  三. ezscript(http://ezscript.seed.cx/)
  ezscript的功能也很多。但tuenhai在windows xp下試用自動發貼時,沒有反應。

   初學者建議使用按鍵精靈,進階則用pcworker。使用教程請參考作者網站。


                   用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("http://www.tuenhai.com") ' tuenhai的小站為例
  do while formbrownetsh.brow.busy  '等待網頁加載完畢
    application.doevents()
  loop
  call fill()
end sub

  以上代碼可實現可視化自動注冊和論壇自動發帖工具。
   還有幾個問題有待解決:
   一. 有的網站要填上識別碼數字才能注冊或發言,如何用程序來實現自動識別識別碼圖片上的數字?
   二. 有的網站一進去就會跳出一個歡迎對話框,程序的運行就被暫停。
   三. 對于自動注冊和發言來說,加載較慢的圖片、flash、音樂等并不是必需的。

  
              用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("http://www.tuenhai.com?" & "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


  visual studio .net 2003 是一個全面的開發工具,用于快速構建面向 microsoft windows? 和 web 并連接 microsoft .net 的應用程序,是否極大地提高了我們的開發效率呢?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂昌县| 得荣县| 本溪| 中方县| 自治县| 阳原县| 宜丰县| 峨山| 双鸭山市| 新乐市| 余庆县| 黑龙江省| 张家川| 巢湖市| 新安县| 盱眙县| 黄石市| 来凤县| 兴义市| 沈阳市| 鄂托克前旗| 南投县| 黄冈市| 萍乡市| 门头沟区| 芒康县| 昌黎县| 水城县| 东港市| 邛崃市| 河津市| 集贤县| 昌邑市| 比如县| 青川县| 扬中市| 昭觉县| 怀来县| 鹤岗市| 资源县| 运城市|