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
錯誤消息說「對象不支持這個屬性或方法 當我嘗試第二個我也得到相同的錯誤信息 –