On Error Resume Next
行正在停止显示错误消息。该错误消息是HTMLDocument上没有名为“getElementByClass”的方法。你可能想要“getElementsByClassName”,而不得不处理这个事实,即返回一个集合而不是单个元素。这样的代码可以工作:
Option Explicit
Sub foo()
Dim ie As New InternetExplorer
Dim item As String
item = Sheet1.Range("A2").Value
Dim doc As HTMLDocument
ie.Visible = True
ie.navigate "http://www.buyshedsdirect.co.uk/" & item
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Dim results As IHTMLElementCollection
Dim result As IHTMLElement
Dim output As String
Set results = doc.getElementsByClassName("NowValue")
output = ""
For Each result In results
output = output & result.innerText
Next result
Sheet1.Range("B2").Value = output
ie.Quit
End Sub
然后,您会发现该页面上有多个类为“NowValue”的元素。它看起来好像你想要一个可以在一个名为“VariantPrice” DIV包围所以这段代码应该工作:
Option Explicit
Sub bar()
Dim ie As New InternetExplorer
Dim item As String
item = Sheet1.Range("A2").Value
Dim doc As HTMLDocument
ie.Visible = True
ie.navigate "http://www.buyshedsdirect.co.uk/" & item
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Dim results As IHTMLElementCollection
Dim results2 As IHTMLElementCollection
Dim result As IHTMLElement
Dim result2 As IHTMLElement
Dim output As String
Set results = doc.getElementsByClassName("VariantPrice")
output = ""
For Each result In results
Set results2 = result.getElementsByClassName("NowValue")
For Each result2 In results2
output = output & result2.innerText
Next result2
Next result
Sheet1.Range("B2").Value = output
ie.Quit
End Sub
编辑:如上面的代码完全适用于我,但不能在问题的工作提问者,他们可能会使用不支持getElementsByClassName
的旧版Internet Explorer。可能会使用querySelector
来代替。要确定,请转至this QuirksMode page以确定您的浏览器支持的内容。
使用querySelector
新代码:
Option Explicit
Sub bar()
Dim ie As New InternetExplorer
Dim doc As HTMLDocument
Dim result As IHTMLElement
Dim result2 As IHTMLElement
Dim item As String
item = Sheet1.Range("A2").Value
ie.Visible = True
ie.navigate "http://www.buyshedsdirect.co.uk/" & item
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Set result = doc.querySelector(".VariantPrice")
Set result2 = result.querySelector(".NowValue")
Sheet1.Range("B2").Value = result2.innerText
ie.Quit
End Sub
进一步编辑:通过所有A列条目使宏观循环,这里的相关位添加或更改:
Option Explicit
Sub bar()
Dim ie As New InternetExplorer
Dim doc As HTMLDocument
Dim result As IHTMLElement
Dim result2 As IHTMLElement
Dim item As String
Dim lRow As Long
ie.Visible = True
lRow = 2
item = Sheet1.Range("A" & lRow).Value
Do Until item = ""
ie.navigate "http://www.buyshedsdirect.co.uk/" & item
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Set result = doc.querySelector(".VariantPrice")
Set result2 = result.querySelector(".NowValue")
Sheet1.Range("B" & lRow).Value = result2.innerText
lRow = lRow + 1
item = Sheet1.Range("A" & lRow).Value
Loop
ie.Quit
End Sub
感谢您的帮助!该页面只有一个类“NowValue”的实例,所以我去了第一个答案。该脚本不再工作,因为行'Set results = doc.getElementsByClassName(“NowValue”)',任何想法? –
你收到了什么错误信息?我已经将代码示例扩展为完整的过程,以便您可以看到这些更改是否合适。此外,该页面[http://www.buyshedsdirect.co.uk/bfd/garden-structures/arches/premier-arches- pergola](http://www.buyshedsdirect.co.uk/bfd/garden-structures/arches/premier-arches-pergola)有四个元素,类别为“NowValue”,因此您可能需要第二个版本的代码 – barrowc
错误消息说“对象不支持这个属性或方法 当我尝试第二个我也得到相同的错误信息 –