【问题标题】:VBScript Code: Object required errorVBScript 代码:需要对象错误
【发布时间】:2013-12-26 16:51:11
【问题描述】:

伙计们

我刚刚写了一个vbs代码sn-p来自动发到论坛。那只是为了方便。我遇到了一个有线问题: 我有几个帐户。当我以某些帐户登录并使用脚本自动发布时,一切正常。但是,当我以其他帐户登录并运行脚本时,出现错误:

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

代码:800a01a8

来源:Microsoft VBScript 运行时错误

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

这是我的代码 sn-p:

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

【问题讨论】:

    标签: vbscript internet-explorer-9 runtime-error


    【解决方案1】:

    您应该在所有 HTML 内容加载后调用您的 POST 例程,例如在 DOMContentLoaded 或 window.onload 中(对于 IE

    【讨论】:

    • 我只是怀疑它。我会试试的。
    【解决方案2】:

    您将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 作为参数传递给 subs!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多