我试图寻找答案,但无济于事。我每次都撞墙。 也许有人可以帮忙吗?
我正在尝试在网站上单击带有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。
答案 0 :(得分:0)
我尝试了您在我的自定义脚本中发布的代码,并认为我已经找到了解决方案。要检查元素是否存在,必须使用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