无法从 span itemprop 中提取数据 [英] Cannot extract data from a span itemprop

查看:27
本文介绍了无法从 span itemprop 中提取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下内容可以从网页中提取一些价格和可用性.但是我在以下位置获得了 Object Required:

I have the following to extract some prices and availabilities from a webpage. But I get Object Required at:

设置价格 = 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

我尝试像下面这样插入延迟

I tried to insert the delay like the following

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

End Sub

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

My scenario is I login first to webpage manually I keep the IE window open I go to excel run macro but..

推荐答案

不看 HTML/URL 很难判断.您确认选择器正确吗?

Hard to tell without seeing HTML/URL. Have you verified the selector is correct?

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

Otherwise, the main two things you can do now, in relation to allowing enough time for page to load, are:

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

1) Add a proper wait before attempting to select

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

2) 尝试定时循环以允许更多的加载时间

2) Try a timed loop to allow further load time

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

这篇关于无法从 span itemprop 中提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆