使用 Visual Basic 从 Internet Explorer 中提取 class 中的值

Extracting a value in a class from Internet Explorer using Visual Basic

使用此代码,我想从网站检索特定标签的值并将其放在我的电子表格中:

Sub get_tit()
    Dim wb As Object
    Dim doc As Object
    Dim sURL As String
    Dim lastrow As Long

    lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row

    Set wb = CreateObject("internetExplorer.Application")
    wb.navigate "https://www.tyre-shopper.co.uk/search/205-55-16/V/91"
    Do While wb.Busy
    Loop

    Set doc = wb.document

    Price = SelectNodes("#more-tyres > li:nth-child(4) > div > div.result-buy > form > span.tyre-price > div.tyre-price-cost.tyres-1 > strong")
    Range("A5").Value = Price
End Sub

我尝试使用 CSS 到 select 的路径作为节点,但不能。 我也尝试从 class select 它,但它再次不起作用

这是网站上的代码,我想从中检索值 57.50

<span class="tyre-price">
    Fully Fitted Price
        <div class="tyre-price-cost tyres-1">

            <strong>&pound;57.50</strong>
            </div><div class="tyre-price-cost tyres-2" style="display:none">

            <strong>&pound;115.00</strong>
            </div><div class="tyre-price-cost tyres-3" style="display:none">

            <strong>&pound;172.50</strong>
            </div><div class="tyre-price-cost tyres-4" style="display:none">

            <strong>&pound;230.00</strong>
            </div><div class="tyre-price-cost tyres-5" style="display:none">

            <strong>&pound;287.50</strong>
            </div>
        </span>

根据 getElementsByClassName method but cycling through the collection returned by the getElementsByTagName method 直接提取元素并比较 class 属性 似乎效果不佳。

Sub get_tit()
    Dim wb As Object
    Dim doc As Object
    Dim sURL As String
    Dim lastrow As Long
    Dim iDIV As Long, sPrice As Variant, sib As Long
    Dim eSIB As IHTMLElement

    lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row

    Set wb = CreateObject("internetExplorer.Application")
    wb.Visible = True
    wb.navigate "https://www.tyre-shopper.co.uk/search/205-55-16/V/91"
    Do While wb.Busy And wb.readyState <> 4
        DoEvents
    Loop

    Set doc = wb.document

    With doc.body
        sPrice = Array(0, 0, 0, 0)
        For iDIV = 0 To .getElementsByTagName("div").Length - 1
            With .getElementsByTagName("div")(iDIV)
                Select Case .className
                    Case "tyre-price-cost tyres-1"
                        sPrice(0) = .innerText
                    Case "tyre-price-cost tyres-2"
                        sPrice(1) = .innerText
                    Case "tyre-price-cost tyres-3"
                        sPrice(2) = .innerText
                    Case "tyre-price-cost tyres-4"
                        sPrice(3) = .innerText
                        With Sheet1
                            .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = sPrice(0)
                            .Cells(Rows.Count, "A").End(xlUp).Offset(0, 1) = sPrice(1)
                            .Cells(Rows.Count, "A").End(xlUp).Offset(0, 2) = sPrice(2)
                            .Cells(Rows.Count, "A").End(xlUp).Offset(0, 3) = sPrice(3)
                        End With
                        sPrice = Array(0, 0, 0, 0)
                    Case Else
                End Select
            End With
        Next iDIV
    End With
End Sub

fwiw,我相信 IXMLHTTPRequest based scrape than one using the InternetExplorer object.

会更好