Web 活动自动化工具






4.87/5 (17投票s)
您可以通过自动化工作来减少人工努力。
背景
继我发布关于 实时比分 [板球] 在 GIT 上的帖子后,我收到了一个发布同样代码的请求。 我来了,开始我的第一篇文章。 我希望您会以某种方式发现它有用。
引言
没有什么太多可以做的,但发现我们中没有多少人知道方法 - 如何做到这一点。 我向您展示如何自动更新您在 CodeProject 上的帖子。 它可能有许多其他用途,但我最近将它用于此任务。
Using the Code
它包括 2 个步骤
- 获取要发布的内容
- 发布内容
需要此代码来了解页面是否已加载。
Dim proceed As Boolean
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, _
ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _
Handles WebBrowser1.DocumentCompleted
proceed = True
End Sub
这是一个可以用来浏览页面或向页面发布一些数据的函数。
Public Sub FillForm(ByRef wbrowser As System.Windows.Forms.WebBrowser, _
ByVal url As String, Optional ByVal keys() As String = Nothing, _
Optional ByVal values() As String = Nothing, _
Optional ByVal submit As String = "")
Dim obj As HtmlElement
Dim objcol As System.Windows.Forms.HtmlElementCollection
proceed = False
wbrowser.Navigate(url)
While Not proceed
Application.DoEvents()
End While
proceed = False
If keys Is Nothing Or values Is Nothing Then Exit Sub
If keys.Length = values.Length Then
For i As Integer = 0 To keys.Length - 1
obj = wbrowser.Document.GetElementById(keys(i))
If obj IsNot Nothing Then obj.SetAttribute("value", values(i))
Next
If submit <> "" Then
If submit = "true" Then
objcol = wbrowser.Document.GetElementsByTagName("input")
For Each objx In objcol
If objx.GetAttribute("Type").ToLower = "submit" Then
obj = objx
Exit For
End If
Next
Else
obj = wbrowser.Document.GetElementById(submit)
End If
If obj IsNot Nothing Then
obj.InvokeMember("Click")
End If
End If
End If
proceed = False
End Sub
要浏览页面,您可以使用此功能,例如
FillForm(WebBrowser1, "www.google.com")
我的应用程序使用雅虎板球获取最新比分。 所以我得到了页面
FillForm(WebBrowser1, _
http://cricket.yahoo.com/cricket-live-score-south-africa-vs-india_11992)
当页面加载后,我必须查找比分。 我检查了页面的源代码,发现 tab1
和 header-main
包含主要比分。
所以我使用以下内容来获取比分内容
Dim content As String = WebBrowser1.Document.GetElementById_
("header-main").InnerText.Trim & vbCrLf & vbCrLf & _
WebBrowser1.Document.GetElementById("tab1").InnerText
这就是我获取要发布内容的方式。
现在我们必须将其发布到 CodeProject。 为此,我获取了我的帖子的编辑链接,即 - https://codeproject.org.cn/script/Forums/Edit.aspx?fid=1580229&select=3719714&floc=/Forums/1580229/General-Indian-Topics.aspx&action=m。
现在有了上述函数,发布它就像切蛋糕一样容易。
FillForm(WebBrowser1, My.Settings.EditURL, New String() _
{"ctl00_MC_Subject", "ctl00_MC_ContentText_MessageText"}, _
New String() {"Live Score [Cricket]", content}, "ctl00_MC_submit")
My.Settings.EditURL
包含我的帖子的编辑 URL。 再次使用页面源,我找到了所需控件的 ID
ctl00_MC_Subject
ctl00_MC_ContentText_MessageText
ctl00_MC_submit
如您所见,keys
包含要编辑的控件 ID,values
包含这些控件的值,顺序相同。 submit
是发布消息的按钮的 ID。 我对此参数有一个特殊情况,如果 submit="true"
,那么它会查找页面上的按钮并单击它。 当页面上只有一个没有 ID 的按钮时,这可能很有用。
它的工作原理如下:它在 keys
中查找控件,并为它们分配来自 values
的值。 在分配所有值后,它会查找提交按钮以发布它。
关注点
这可以用于许多方面。 这只是您能做什么以及如何做。 只是一个明智的词 - 用于做好事,不要用于垃圾邮件。
我知道这并没有处理任何消息框,或来自页面的脚本错误。 并且还有许多其他情况需要考虑。
有广泛的修改范围,但到目前为止,我只对这个函数满意。 只要我需要它,它就能发挥作用。 尽管如此,欢迎您提出建议。 如果您发现它有好的用途或修改,请随时告知我。
历史
- 在此阶段 (2011 年 1 月) 尚未对代码进行任何更改
- [201101051220] 包含代码