IE中已打开的网页中的对象必需错误

时间:2014-08-17 05:38:37

标签: internet-explorer vbscript automation

当我试图获取已经打开的网页的文档元素时,我得到了对象所需的错误。我厌倦了以下

set ie = WScript.CreateObject("InternetExplorer.Application")
ie.navigate("....")
ie.Document.GetElementsByID("....").click  'leads to new web page. 

它像从javascript弹出,所以我无法直接访问此页面的文档元素(我不能使用导航,因为它喜欢填写表单与外部详细信息在单独的形式)。所以我厌倦了以下来获得通过使用这些

获取已经打开窗口的方法的页面元素
Set objIE = GetIE("Location Details")
    ...

    Function GetIE(Title)
      Dim objShell, objIE
      Set objShell = CreateObject("Shell.Application")
      For Each objIE In objShell.Windows
        If InStr(objIE.LocationName, Title) > 0 Then
          Set GetIE = objIE
          Exit Function
        End If
      Next
    End Function

当我使用此GetIE功能时,我在

上遇到运行时错误
set objIE = GetIE("Location Details")

类似于GetIE所需的对象,请帮我解决此问题

1 个答案:

答案 0 :(得分:0)

  1. Set x = y这样的设置分配会抛出一个"所需的对象" 错误,如果你不是一个对象。
  2. 在成功的情况下返回对象的函数,应该返回Nothing表示失败;否则Set assigment会崩溃。
  3. 应检查非trival函数返回。
  4. 在代码中:

    Option Explicit
    
    Function f1(bObj)
      If bObj Then
         Set f1 = New RegExp
      End If
    End Function
    
    Function f2(bObj)
      If bObj Then
         Set f2 = New RegExp
      Else
         Set f2 = Nothing
      End If
    End Function
    
    Dim bObj, sFnc, oObj
    For Each bObj In Array(True, False)
        For Each sFnc In Split("f1 f2")
            WScript.StdOut.Write sFnc & "(" & bObj & ") => "
           On Error Resume Next
            Set oObj = GetRef(sFnc)(bObj)
            If Err.Number Then
               WScript.Echo TypeName(GetRef(sFnc)(bObj)), Err.Description
            Else
               WScript.Echo TypeName(oObj), "ok"
            End If
           On Error GoTo 0
        Next
        Set oObj = f2(bObj)
        If oObj Is Nothing Then
           WScript.Echo "oObj Is Nothing =>", "Object not aquired"
        Else
           WScript.Echo "Got an object"
        End If
    Next
    

    输出:

    cscript 25346586.vbs
    f1(True) => IRegExp2 ok
    f2(True) => IRegExp2 ok
    Got an object
    f1(False) => Empty Object required
    f2(False) => Nothing ok
    oObj Is Nothing => Object not aquired