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类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
任何帮助将非常感激!
谢谢
枷锁
将这两个类组合到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
当然你也可以在设置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,但是取决于您的使用情况。