VBA脚本来拉取特定的HTML类中的值

我创build了一个VBA脚本,通过获取HTML类中的值来从网站上获取价格。

请参阅VBA脚本从网站拉数据更多的上下文。

这工作得很好,但有些情况下只有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 | | 

在这个例子中,前两个代码使用下面的代码:(查找int类VariantPriceNowValue ),但是第三个例子不工作,因为类VariantPriceNowValue不存在,但它有类priceSinglePrice

我使用的代码如下:

 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 

任何帮助将非常感激!

谢谢

枷锁

将这两个类组合到querySelector的调用中,如果resultNothing ,则用另一个类再次调用它。

例:

 ' ... 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 

当然你也可以在设置result之后检查NowValue类的存在性:

 ' ... Set result = doc.querySelector(".VariantPrice") If IsNull(result.querySelector(".NowValue")) Then Set result2 = result.querySelector(".price") Else Set result2 = result.querySelector(".NowValue") End If 

就个人而言,我更喜欢第一种select,但是取决于您的使用情况。