gpt4 book ai didi

vba - GetElementsbyClassname:开放 IE 与 MSXML2 方法

转载 作者:行者123 更新时间:2023-12-02 11:40:59 25 4
gpt4 key购买 nike

下面的宏工作得很好。它打开 IE 的实例并使用“getelementsbyclassname”方法返回“my_rate”的预期值。但是,当我运行使用“MSXML2”方法的第二个宏时,该宏在指定的行上失败,并出现“运行时错误 438:对象不支持此属性或方法”错误。为什么“Open IE”方法可以工作,但“MSXML2”方法在我的代码中失败?我正在使用 IE 11 运行。我还为第二个宏设置了对 Microsoft HTML 对象库的引用,但它似乎没有什么区别。预先感谢您向我解释这一点。

Sub BankRate_Rate_Retrieval()
my_url = "http://www.bankrate.com/funnel/mortgages/mortgage-results.aspx?market=321&loan=150000&perc=20&prods=2&points=0"
Set ie = CreateObject("InternetExplorer.Application")

With ie
.Visible = True
.Navigate my_url
.Top = 50
.Left = 530
.Height = 400
.Width = 400
End With

Do Until Not ie.Busy And ie.readyState = 4
DoEvents
Loop

my_rate = ie.Document.getelementsbyclassname("br-col-2 br-apr")(1).getElementsByTagName("div")(0).innertext
End Sub


Sub BankRate_Rate_Retrieval()
my_url = "http://www.bankrate.com/funnel/mortgages/mortgage-results.aspx?market=321&loan=150000&perc=20&prods=2&points=0"
Set html_doc = CreateObject("htmlfile")
Set xml_obj = CreateObject("MSXML2.XMLHTTP")

xml_obj.Open "GET", my_url, False
xml_obj.send
html_doc.body.innerhtml = xml_obj.responseText
Set xml_obj = Nothing

my_rate = html_doc.body.getelementsbyclassname("br-col-2 br-apr")(1).getElementsByTagName("div")(0).innertext

'运行时错误 438:对象不支持此属性或方法出现在上面的行

结束子

编辑:D. Zemens 的库屏幕截图

enter image description here

最佳答案

错误消息非常简单:

GetElementsByClassName 不是 Microsoft XML v6.0 库中可用的方法。

您可以在此处查看可用的方法:

http://msdn.microsoft.com/en-us/library/aa926433.aspx

虽然我找不到类似的文档链接,但如果您启用对 MSHTML 库的引用,您可以在那里查看以同样地确认,没有 GetElementsByClassName 方法。此方法适用于 IE 自动化,但不适用于 HTML 或 DOMDocument。

enter image description here

已更新

虽然这可能无法解决您的问题,但我将其放在这里,以防它对使用 IE8 的其他人有所帮助。它似乎可以用于此目的,但可能需要改进。

Option Explicit

Sub BankRate_Rate_Retrieval()
Dim my_url As String
Dim html_doc As Object 'HTMLDocument
Dim xml_obj As Object 'MSXML2.DOMDocument
Dim my_rate As String

my_url = "http://www.bankrate.com/funnel/mortgages/mortgage-results.aspx?market=321&loan=150000&perc=20&prods=2&points=0"

Set html_doc = CreateObject("htmlfile")
Set xml_obj = CreateObject("MSXML2.XMLHTTP")

xml_obj.Open "GET", my_url, False
xml_obj.send
html_doc.body.innerhtml = xml_obj.responseText

'attempt to replicate the GetElementsByClassName for IE8

my_rate = IE8_GetElementsByClassName(html_doc.body, "br-col-2 br-apr", 1).GetElementsByTagName("div")(0).InnerText

MsgBox my_rate


Set xml_obj = Nothing
Set html_doc = Nothing


End Sub

Function IE8_GetElementsByClassName(html As Object, className As String, Optional Position As Integer)
'Function to return an array of matching classname elements
' or if specified will return a single HTMLElement by Position index

Dim eleDict As Object
Dim ele as Variant
Set eleDict = CreateObject("Scripting.Dictionary")
For x = 0 To html.all.Length - 1
Set ele = html.all(x)
If ele.className = className Then
'Debug.Print i & vbTab & x & vbTab & ele.InnerText
Set eleDict(i) = ele
i = i + 1
End If
Next

If Position = Empty Then
IE8_GetElementsByClassName = eleDict.Items
Else
Set IE8_GetElementsByClassName = eleDict(Position)
End If
Set eleDict = Nothing
End Function

关于vba - GetElementsbyClassname:开放 IE 与 MSXML2 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23476502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com