浏览器在刷新页面时会从浏览器的“网络”选项卡中找到的另一个URI动态检索这些值。我只需要发出一个xmlhttp请求(更快且没有浏览器),然后使用css类选择器按类在所需的节点上进行匹配即可。循环返回的nodeList并写到Excel
Option Explicit
Public Sub ScrapeValues()
Dim html As HTMLDocument,values As Object,i As Long,ws As Worksheet
Set html = New HTMLDocument
Set ws = ThisWorkbook.Worksheets("Sheet1")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET","https://www.nseindia.com/products/dynaContent/equities/equities/htms/fiiEQ.htm",False
.send
html.body.innerHTML = .responseText
End With
Set values = html.querySelectorAll(".date,.number")
For i = 0 To values.Length - 1
With ws
.Cells(i + 1,1) = values.Item(i).innerText
End With
Next
End Sub
如果要使用IE,则需要对这些元素的存在进行测试,并进行定时循环,例如
Option Explicit
Public Sub ScrapeValues()
Dim ie As InternetExplorer,ws As Worksheet,t As Date
Const MAX_WAIT_SEC As Long = 5 '<==adjust time here
Set ie = New InternetExplorer
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ie
.Visible = True
.Navigate2 "https://www.nseindia.com/products/content/equities/equities/fii_dii_market_today.htm"
While .Busy Or .readyState <> 4: DoEvents: Wend
t = Timer
Do
Set values = .document.querySelectorAll(".date,.number")
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While values.Length = 0
If values.Length > 0 Then
For i = 0 To values.Length - 1
With ws
.Cells(i + 1,1) = values.Item(i).innerText
End With
Next
End If
.Quit
End With
End Sub
-
参考(VBE>工具>参考):
- Microsoft HTML对象库
- Microsoft Internet控件
本文链接:https://www.f2er.com/3093958.html