【发布时间】:2020-12-17 06:55:03
【问题描述】:
我的脚本运行了几行,然后我获取对象变量或块变量未设置错误。
我正在使用以下脚本从 NSEIndia 网站中提取 5、6、7 值。
我从同一个 Excel 中获取股票的价值,并使用来自 nseindia 网站的值更新同一个 Excel。
Sub Stock_Basic_Update_NSE()
Dim ie As InternetExplorer
Dim webpage As HTMLDocument
Dim ws As Worksheet
For Item = 23 To 1505
Set ws = ThisWorkbook.Worksheets("NSE Stocks Details")
sSearch = ws.Range("A" & Item).Value
'sSearch = Filestk.Worksheets("Sheet1").Range("E1").Value
Set ie = New InternetExplorer
'ie.Visible = True
ie.navigate ("https://www.nseindia.com/get-quotes/equity?symbol=" & sSearch)
Do While ie.readyState = 4: DoEvents: Loop
Do Until ie.readyState = 4: DoEvents: Loop
While ie.Busy
DoEvents
Wend
Set webpage = ie.document
ws.Cells(Item, 3).Value = webpage.getElementsByClassName("eq-series table-fullwidth w-100")(0).getElementsByTagName("td")(5).innerText
ws.Cells(Item, 4).Value = webpage.getElementsByClassName("eq-series table-fullwidth w-100")(0).getElementsByTagName("td")(6).innerText
ws.Cells(Item, 5).Value = webpage.getElementsByClassName("eq-series table-fullwidth w-100")(0).getElementsByTagName("td")(7).innerText
ie.Quit
Set ie = Nothing
Next Item
End Sub
【问题讨论】:
-
A 列中的
items是什么? -
尝试将
Set ws = ThisWorkbook.Worksheets("NSE Stocks Details")移出FOR循环 -
尝试在
Set webpage之前使用延迟Application.Wait Now + TimeValue("00:00:05")来消除该错误。您可以使用.document.getElementById("equityInfo").getElementsByTagName("td")(5).innerText或.document.querySelector("#equityInfo td:nth-of-type(6)").innerText来定位所需的元素,而不是使用您当前正在执行的复合类。更改索引应该会为您获取所需的内容。 -
@SIM 你的意思是错误基本上是在页面加载之前打印的值?
-
@SIM,我已将值增加到 10,因为它在运行 20 行后再次失败......我必须运行 2000 行。让我在它完全运行后告诉我。感谢您的支持和帮助
标签: html excel vba internet-explorer web-scraping