最近朋友想在天涯发点广告,看到天涯上的卖茶的广告贴,觉得很有意思,问我能不能帮他写一个类似的程序。本来我想这种灌水机应该网上很多吧,谁知道上网一找,非常少,而且偶尔有也是收费的,于是我决定自己来试试写一个。由于本人是小菜,对什么HTTP协议之类的完全不懂,怎么办?只好使用WebBrowser控件来模拟登录或发贴的动作,所以这个顶贴机只能算是很简单的了,写在这里,也是想起到抛砖引玉的作用。目前这个顶贴机分两个版本,一个是专顶自己的贴,另一个是自动抓每个版块的前几名的贴子回复(类似灌水:))。其实原理都一样。
先说一下我的思路,晚上回去把源码放出来。首先用webbrowser打开天涯,获取到填用户名和密码的框,填入后模拟提交。在读取用户的帖子列表URL,保存到本地XML文件。遍历地址,分别浏览帖子URL,获取回复框,自动填入预设的回复文字(预设的回复文字可以预先保存在本地的XML文件里),模拟提交,最后完成。说起来比较简单。就不多说了,回去放源码,代码阅读有问题的可以留言讨论。需要现成的程序的,可以留言,我会提供。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '程序运行时OPEN天涯首页 WebBrowser1.Navigate("http://www.tianya.cn") End Sub
登录代码
更新贴子列表
回复帖子
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted Dim btnClick As HtmlElement = Nothing 'Dim elementT As HtmlElement = Nothing Dim htmDoc As HtmlDocument If Not postUrl = WebBrowser1.Url.ToString Then Exit Sub End If If (WebBrowser1.ReadyState < WebBrowserReadyState.Complete) Then Exit Sub '未完全加载时不执行 htmDoc = WebBrowser1.Document Try For Each a As HtmlElement In htmDoc.GetElementById("bbsPost").All If a.TagName.ToUpper = "TEXTAREA" Then a.InnerText = postText ElseIf a.TagName.ToUpper = "INPUT" Then If a.GetAttribute("value") = "回复(Ctrl+Enter)" Then btnClick = a End If End If Next Catch ex As Exception Exit Sub End Try If btnClick Is Nothing Then Exit Sub End If btnClick.InvokeMember("Click") End Sub
开始顶贴按钮
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'Dim urlText As String() Dim fileXml, textXml As New Xml.XmlDocument Dim urlList, urlList2 As Xml.XmlNodeList If Button3.Text = "开始顶贴" Then Button3.Text = "停止顶贴" state = False fileXml.Load("posturl.xml") textXml.Load("posttext.xml") urlList = fileXml.SelectNodes("/post/posturl/url") urlList2 = textXml.SelectNodes("/post/text") For i As Integer = 1 To 1000 For Each b As Xml.XmlNode In urlList2 For Each a As Xml.XmlNode In urlList If state Then Exit Sub postUrl = a.FirstChild.Value WebBrowser1.Navigate(postUrl) postText = b.FirstChild.Value delay(75) Next Next Next Else state = True Button3.Text = "开始顶贴" End If End Sub
View Code
Public Sub delay(ByRef Interval As Double) Dim time As DateTime = DateTime.Now Dim Span As Double = Interval * 10000000 '因为时间是以100纳秒为单位。 While ((DateTime.Now.Ticks - time.Ticks) < Span) Application.DoEvents() End While End Sub