我正在尝试使用 Excel 中的 VBA从该站点获取数据。我尝试做的和有效的方法是使用 InternetExplorer 对象,如下所示:
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.Navigate "http://zertifikate.finanztreff.de"
IE.document.getElementById("USFsecuritySearchDropDown").Value = "DE000BP5TBQ2"
IE.document.getElementById("USFsecuritySearchDropDownForm").submit
Do While IE.Busy Or IE.readyState <> 4 'wait until page is loaded
Application.Wait DateAdd("s", 1, Now)
Loop
MsgBox IE.document.getElementById("BP5TBQ~30~5").innerHTML
然而,这工作非常缓慢,并不总是得到正确的结果。我怀疑有时它没有等到网页加载完毕。我试图寻找答案,并在 stackoverflow 上找到了这个答案。现在我想弄清楚如何使用 MSXML2 和 MSHTML 重写我的宏。到目前为止,我能够做到这一点:
Dim IE As MSXML2.XMLHTTP60
Set IE = New MSXML2.XMLHTTP60
IE.Open "GET", "http://zertifikate.finanztreff.de", False
IE.send
While IE.ReadyState <> 4
DoEvents
Wend
Dim HTMLDoc As MSHTML.HTMLDocument
Dim htmlBody As MSHTML.htmlBody
Set HTMLDoc = New MSHTML.HTMLDocument
Set htmlBody = HTMLDoc.body
htmlBody.innerHTML = IE.responseText
HTMLDoc.getElementById("USFsecuritySearchDropDown").Value = "DE000BP5TBQ2"
请问,为什么 HTMLDoc 有方法 getElementById 而 htmlBody 没有?我如何提交表格“USFsecuritySearchDropDownForm”。我试过这个:
HTMLDoc.getElementById("USFsecuritySearchDropDownForm").submit
,但它总是在我的默认浏览器中打开新窗口,我想隐藏它。在我看来,我缺少 XMLHTTP60 和 MSHTML.HTMLDocument 之间的区别。如果你能帮助我,或者至少告诉我在哪里可以找到这些信息,我将非常感激......