我创建了一个VBA脚本,通过获取HTML类中的值来从网站中提取价格。
有关更多背景信息,请参阅VBA Script pull data from website。
这很有效但是在某些情况下只有1个价格(没有RRP和销售价格),因此我需要以某种方式合并一个if语句来查找一个类名,如果那不是'存在寻找另一个。
例如,我有以下电子表格:
| A | B | C |
| | Item | Price |
| | bfd/garden-structures/arbours/arbours-sunflower | |
| | bfd/garden-structures/arbours/tatton-corner-arbour-seat | |
| | bsd/garden-storage/wooden-storage/4-x-2-windsor-garden-storage-chest | |
在这个示例中,前两个使用下面的代码:(查看类VariantPrice
& NowValue
)但是第三个示例不能用作类VariantPrice
&安培; NowValue
不存在,但它确实有price
类& SinglePrice
。
我使用的代码如下:
Sub BuyDeckingDirect()
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 = Worksheets("BuyDeckingDirect").Range("B" & lRow).Value
MsgBox "Price Dump Started"
Do Until item = ""
ie.navigate "http://www.buydeckingdirect.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")
Worksheets("BuyDeckingDirect").Range("C" & lRow).Value = result2.innerText
lRow = lRow + 1
item = Worksheets("BuyDeckingDirect").Range("B" & lRow).Value
Loop
MsgBox "BuyDeckingDirect Price Dump Complete"
End Sub
任何帮助都会非常感激!
由于
尔杰斯
答案 0 :(得分:1)
将querySelector
调用中的两个类合并,如果result
为Nothing
,请使用替代类再次调用它。
示例:
' ...
Set result = doc.querySelector(".VariantPrice .NowValue")
If result Is Nothing Then
Set result = doc.querySelector(".VariantPrice .price")
End If
' You should consider the fact that you can have neither
If result Is Nothing Then
Worksheets(...etc...).Value = "N/A"
Else
Worksheets(...etc...).Value = result.innerText
End If
当然,您也可以在设置NowValue
之后检查是否存在result
类:
' ...
Set result = doc.querySelector(".VariantPrice")
If IsNull(result.querySelector(".NowValue")) Then
Set result2 = result.querySelector(".price")
Else
Set result2 = result.querySelector(".NowValue")
End If
就个人而言,我更喜欢第一种选择,但它取决于您的使用案例。