首页 文章

无法从span itemprop中提取数据

提问于
浏览
0

我有以下内容从网页中提取一些价格和可用性 . 但是我得到了对象:

Set price = ie.Document.querySelector(".price-cont .final-price"

为什么?

Sub getMetaDataInfo()
Dim ie As New InternetExplorer
Dim mylink As String
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wks As Worksheet
Dim lastrow As Integer
Set wks = wb.Sheets("Info")
Dim i As Integer
lastrow = wks.Cells(Rows.Count, "B").End(xlUp).Row

For i = 2 To lastrow

mylink = wks.Cells([i], 2).Value   

ie.Visible = False
ie.Navigate mylink

Do
DoEvents
Loop Until ie.ReadyState = READYSTATE_COMPLETE

Dim price As Object, availability As Object

Set price = ie.Document.querySelector(".price-cont .price")
wks.Cells(i, "C").Value = price.innerText   

Set availability = ie.Document.querySelector(".inner-box-one .availability")
wks.Cells(i, "D").Value = availability.innerText   

Next i

End Sub

我尝试插入延迟,如下所示

Sub getMetaDataInfo()
Dim IE As New InternetExplorer

Dim mylink As String
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wks As Worksheet
Dim lastrow As Integer
Set wks = wb.Sheets("Info")
Dim i As Integer

lastrow = wks.Cells(Rows.Count, "B").End(xlUp).Row

IE.Visible = True


For i = 2 To lastrow

mylink = wks.Cells(i, 2).Value

IE.Visible = False
IE.Navigate mylink


Dim price As Object, t As Date
Const MAX_WAIT_SEC As Long = 5

Dim price As Object, availability As Object

While IE.Busy Or IE.ReadyState < 4: DoEvents: Wend
t = Timer
Do
    DoEvents
    On Error Resume Next

    Set price = IE.Document.querySelector(".price-cont .final-price")
    wks.Cells(i, "C").Value = price.innerText

    If Timer - t > MAX_WAIT_SEC Then Exit Do
    On Error GoTo 0
Loop
If price Is Nothing Then Exit Sub


Next i

结束子

我的方案是我首先手动登录网页我保持IE窗口打开我去excel运行宏但是..

1 回答

  • 0

    很难说没有看到HTML / URL . 你验证选择器是否正确?

    否则,您现在可以做的主要两件事就是允许有足够的时间加载页面:

    1)在尝试选择之前添加适当的等待

    While ie.Busy Or ie.readyState < 4: DoEvents: Wend
    

    2)尝试定时循环以允许进一步的加载时间

    Option Explicit
    Public Sub LoopUntilSet()
        Dim price As Object, t As Date
        Const MAX_WAIT_SEC As Long = 5
    
        'your other code
    
        While ie.Busy Or ie.readyState < 4: DoEvents: Wend
        t = Timer
        Do
            DoEvents
            On Error Resume Next
            Set price = ie.document.querySelector(".price-cont .price")
            If Timer - t > MAX_WAIT_SEC Then Exit Do
            On Error GoTo 0
        Loop
        If price Is Nothing Then Exit Sub
    
        'other code.....
    End Sub
    

    3)从 i 周围移除[]

相关问题