VBScript代码:对象必需错误

VBScript代码:对象必需错误,vbscript,internet-explorer-9,runtime-error,Vbscript,Internet Explorer 9,Runtime Error,伙计们 我刚刚写了一个vbs代码片段,可以自动在论坛上发布。那只是为了方便。我遇到了一个有线问题: 我有几个账户。当我作为一些帐户登录并使用脚本自动发布时,一切正常。但是,当我以其他帐户登录并运行脚本时,我得到了错误: 错误:需要对象“getElementById(…)” 代码:800a01a8 来源:Microsoft VBScript运行时错误 我确信该对象存在,因为我从网页的源代码中获取它。我觉得错误是随机发生的,我无法得到规律性。 该脚本在Windows 8操作系统中运行,浏览器为IE9

伙计们

我刚刚写了一个vbs代码片段,可以自动在论坛上发布。那只是为了方便。我遇到了一个有线问题: 我有几个账户。当我作为一些帐户登录并使用脚本自动发布时,一切正常。但是,当我以其他帐户登录并运行脚本时,我得到了错误:

错误:需要对象“getElementById(…)”

代码:800a01a8

来源:Microsoft VBScript运行时错误

我确信该对象存在,因为我从网页的源代码中获取它。我觉得错误是随机发生的,我无法得到规律性。 该脚本在Windows 8操作系统中运行,浏览器为IE9。我是vbs的新手,不知道如何调试它。所以我希望有人能帮助我。你可以给我一些线索

以下是我的代码片段:

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作为参数传递给子过程!