欢迎光临
我们一直在努力

用VB.NET做个论坛发帖软件-.NET教程,VB.Net语言

建站超值云服务器,限时71元/月

作者: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 的应用程序,是否极大地提高了我们的开发效率呢?

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 用VB.NET做个论坛发帖软件-.NET教程,VB.Net语言
分享到: 更多 (0)