【发布时间】:2017-12-04 20:31:47
【问题描述】:
我正在尝试将我的一些工作 VBA 代码转换为 VBScript,但在尝试使用 getElementsByClassName 方法时,VBScript 中不断出现错误。这是完整的代码:
option explicit
Dim XMLPage, html
Set XMLPage = WScript.CreateObject("MSXML2.XMLHTTP")
Set html= CreateObject("HTMLFile")
XMLPage.Open "GET", "https://www.hltv.org/stats/matches/mapstatsid/48745/immortals-vs-dignitas", False
Wscript.Sleep 50
XMLPage.send
Wscript.Sleep 50
If XMLPage.Status <> 200 Then MsgBox XMLPage.statusText
html.Open
html.write XMLPage.responseText
html.Close
'msgbox html.getElementsByTagName("tbody")(0).innertext'WORKS
msgbox html.getElementsByClassName("match-info-box-con")(0).innertext'DOESNT WORK
如果我将其注释掉并运行它来搜索标签名称(上面一行的代码) - 它可以正常工作。
据我了解,我怀疑这与变量 html 的声明方式有关。 getElementsByClassName 来自 IHTMLElement6 - 但我不确定如何让它在 VBScript 中工作。
【问题讨论】:
-
comes from IHTMLElement6- 也来自IHTMLDocument7。 Should work 在 Vista+ 上。您也可以在html.body上试用。 -
谢谢,您能帮我建议如何将其应用于上述代码吗?由于这是在 VBScript 中,我必须在代码中进行所有声明,因为我无法选择与在 VBA 中相同的引用。
-
html.body.getElementsByClassName? -
谢谢,我尝试了这个并得到了同样的错误 - 只是在这种情况下它说:不支持'body.getElementsByClassName'。如果您对如何解决这个问题有更多想法 - 将不胜感激。谢谢。
-
MSHTML 的行为因实例化方式而异 - 它根据其早期绑定还是后期绑定(严重依赖 IDispatch)公开不同的接口。您是后期绑定并且没有暴露
getElementsByClassName的接口可用。您可以遍历document.all()并查看每个item.className。