VBScript代码:对象必需错误
伙计们 我刚刚写了一个vbs代码片段,可以自动在论坛上发布。那只是为了方便。我遇到了一个有线问题: 我有几个账户。当我作为一些帐户登录并使用脚本自动发布时,一切正常。但是,当我以其他帐户登录并运行脚本时,我得到了错误: 错误:需要对象“getElementById(…)” 代码:800a01a8 来源:Microsoft VBScript运行时错误 我确信该对象存在,因为我从网页的源代码中获取它。我觉得错误是随机发生的,我无法得到规律性。 该脚本在Windows 8操作系统中运行,浏览器为IE9。我是vbs的新手,不知道如何调试它。所以我希望有人能帮助我。你可以给我一些线索 以下是我的代码片段:VBScript代码:对象必需错误,vbscript,internet-explorer-9,runtime-error,Vbscript,Internet Explorer 9,Runtime Error,伙计们 我刚刚写了一个vbs代码片段,可以自动在论坛上发布。那只是为了方便。我遇到了一个有线问题: 我有几个账户。当我作为一些帐户登录并使用脚本自动发布时,一切正常。但是,当我以其他帐户登录并运行脚本时,我得到了错误: 错误:需要对象“getElementById(…)” 代码:800a01a8 来源:Microsoft VBScript运行时错误 我确信该对象存在,因为我从网页的源代码中获取它。我觉得错误是随机发生的,我无法得到规律性。 该脚本在Windows 8操作系统中运行,浏览器为IE9
Option Explicit
Dim IEApp
Dim iURL1
Dim iURL2
Dim iURL3
Dim iURL4
Dim iURL5
Set IEApp = CreateObject("InternetExplorer.Application")
iURL1="http://bbs.dealmoon.com/thread-299027-1-1.html"
iURL2="http://bbs.dealmoon.com/thread-299195-1-1.html"
iURL3="http://bbs.dealmoon.com/thread-299018-1-1.html"
iURL4="http://bbs.dealmoon.com/thread-299015-1-1.html"
iURL5="http://bbs.dealmoon.com/thread-299014-1-1.html"
Open iURL1
Open iURL2
Open iURL3
Open iURL4
Open iURL5
WScript.Echo("Done!")
Sub Wait(IE)
Do
WScript.Sleep 500
Loop While IE.ReadyState < 4 And IE.Busy
Do
WScript.Sleep 500
Loop While IE.ReadyState < 4 And IE.Busy
End Sub
Sub Post(IE)
Dim count
For count=0 To 9
With IE.Document
.getElementById("fastpostmessage").innerHTML = "good"
.getElementById("fastpostsubmit").click
Wait IE
WScript.Sleep GetRandom(7,15)
End With
Next
End Sub
Sub Open(PageURL)
IEApp.Visible = False
IEApp.Navigate PageURL
Wait IEApp
Post IEApp
End Sub
Function GetRandom(floor,ceil)
Randomize
GetRandom=Int((ceil - floor + 1) * Rnd + floor)*1000
End Function
选项显式
Dim IEApp
Dim iURL1
Dim IUr2
Dim IUR3
Dim IUR4
Dim IUR5
设置IEApp=CreateObject(“InternetExplorer.Application”)
iURL1=”http://bbs.dealmoon.com/thread-299027-1-1.html"
iURL2=”http://bbs.dealmoon.com/thread-299195-1-1.html"
iURL3=”http://bbs.dealmoon.com/thread-299018-1-1.html"
iURL4=”http://bbs.dealmoon.com/thread-299015-1-1.html"
iURL5=”http://bbs.dealmoon.com/thread-299014-1-1.html"
开放式iURL1
开放式iURL2
开放iURL3
开放iURL4
开放iURL5
Echo(“完成!”)
分段等待(IE)
做
WScript.Sleep 500
当IE.ReadyState<4且IE.Busy时循环
做
WScript.Sleep 500
当IE.ReadyState<4且IE.Busy时循环
端接头
副员额(IE)
模糊计数
对于计数=0到9
用IE文件
.getElementById(“fastpostmessage”).innerHTML=“好”
.getElementById(“fastpostsubmit”)。单击
等等
WScript.Sleep GetRandom(7,15)
以
下一个
端接头
子打开(页面URL)
IEApp.Visible=False
导航页面URL
等待IEApp
发布IEApp
端接头
函数GetRandom(楼层、天花板)
随机化
GetRandom=Int((天花板-楼层+1)*Rnd+楼层)*1000
端函数
您应该在加载所有HTML内容后调用POST例程,例如在DOMContentLoaded或window.onload中(对于IE您将IEApp
暗显,创建了对象,但在尝试获取元素ID时未使用它。您的With
块应如下所示:
With IEApp.Document
.getElementById("fastpostmessage").innerHTML = "good"
.getElementById("fastpostsubmit").click
Wait IEApp
WScript.Sleep GetRandom(7,15)
End With
还有一些地方你只有
IE
而没有IEApp
。清除它们,你的代码就会运行良好。我只是怀疑。我会试试。伙计,我不同意你的看法。我将IEApp作为一个全局变量调暗,但当我定义子过程时,比如“sub-post(IE)”,我想到了“IE”作为这个子过程的参数,所以我可以在子过程中使用它。当我调用它时,我需要做的只是将实际参数“IEApp”传递给它。IEApp作为参数传递给子过程!