【问题标题】:VBscript Create an object from an IE elementVBscript 从 IE 元素创建对象
【发布时间】:2019-02-01 13:09:48
【问题描述】:

我试图寻找答案,但无济于事。我每次都撞墙。 也许有人可以帮忙?

我正在尝试在网站上单击带有 VBscript 的元素。 这行得通。但是,首先我想通过循环检查元素是否存在。 如果不是因为下面的代码出现“无效使用 null”错误,这将起作用。

如何从 IE 元素中创建一个对象来检查它是否存在?

Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")
IE.Navigate "url"
With IE.Document

Do
if not CreateObject(.getElementByID("formButton2343255")) is nothing then            
.getElementByID("formButton2343255").Click()
Exit Do
End if
WScript.Sleep 500 
Loop

SET objWshShell = Nothing
End With
End Function

我希望按钮被点击。但在这种情况下,要么我的对象不存在,要么我对 null 的使用无效。

【问题讨论】:

    标签: javascript html object vbscript element


    【解决方案1】:

    我尝试了您在我的自定义脚本中发布的代码,并认为我已经找到了解决方案。要检查元素是否存在,必须使用IsObject 函数;但是,如果您在DOM 准备好之前尝试使用它(即IE.ReadyState 等于4),则会引发未指定的错误(典型的与IE 相关的东西,很多怪癖)。

    因此,我没有使用无限循环等待元素存在,而是将其更改为等待DOM 准备好;因此,当我调用 IsObject 时,它不应再抛出错误,从而产生正确的结果,从而允许按预期进行检查。

    下面的例子打开一个IE窗口并导航到https://stackoverflow.com;等待 DOM 准备就绪,然后单击左侧边栏上的“标签”菜单 (#nav-tags);因此,按预期导航到“标签”页面。非常像您的示例,因此您可以轻松地将其用作了解您的案例的指南。

    Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")
    
    IE.Navigate "https://stackoverflow.com"
    IE.Visible = True
    
    'Wait til DOM is ready
    Do Until IE.ReadyState = 4 : Loop
    
    If IsObject(IE.Document.GetElementById("nav-tags")) Then
        IE.Document.GetElementById("nav-tags").Click()
    End If
    
    Set IE = Nothing
    

    【讨论】:

    • 感谢 lenilsondc 的回复!好吧,当我这样做时,我收到一个错误“需要对象”。抱歉,让我用包括 WITH 在内的完整程序编辑我的原始帖子。也许我在那里做错了什么?
    • @MushroomKing 您是在运行 vbs 文件还是在脚本标签内的 html 页面内运行 VBScript?
    • 我正在使用 vbs 文件。
    • @MushroomKing 我已经更新了我的答案,我想这次我明白了。看看吧。
    • 太棒了!那是比我想出的更好的解决方案!我会用它。非常感谢。我使用了 "If IsNull(IE.Document.getElementByID("...") Then..." 这在这种情况下也可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多