【发布时间】:2018-12-10 07:31:36
【问题描述】:
我有以下内容可以从网页中提取一些价格和可用性。但我在:
设置价格 = 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
End Sub
我的情况是我先手动登录网页我保持 IE 窗口打开我去 excel 运行宏但是..
【问题讨论】:
-
不知道网页源码很难回答,请分享网址
-
您还需要一个适当的等待(当 ie.Busy 或 ie.readyState
-
它只工作了一两次,这让我想知道为什么??!它是我首先登录的产品页面
-
您没有足够的时间。请参阅下面的答案。
标签: html excel vba web-scraping