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

时间:2015-07-18 22:31:26

标签: excel vba excel-vba internet-explorer automation

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

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路径将其选为节点但不能。 我也尝试从课堂上选择它,但它再次无效

这是网站上的代码,我想从中检索值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>

1 个答案:

答案 0 :(得分:1)

我根据getElementsByClassName method直接提取元素但是在getElementsByTagName method返回的集合中循环并且比较类属性似乎也起到了最小的作用,我从未取得太大成功。

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

tyre scrape

fwiw,我相信使用基于IXMLHTTPRequest的刮擦比使用InternetExplorer object的擦除更好。