我正在尝试从多个网页中获取数据(从同一站点的不同库存页面(。我可以在执行循环的前3次中拔出数据,但是在第四次迭代中,它提出了错误91:对象变量或未设置块变量。
我尝试围绕Internet Explorer打开命令移动,以便在每次迭代的开头打开一个新的浏览器,并在循环结束时将其关闭,以确保IE对象并不会以某种方式失败。那不起作用,同样的问题。
Sub GetStock()
Dim ws As Worksheet: Set ws = ActiveSheet
Dim cellnum As Range: Set cellnum = Range(ActiveCell.Address)
Dim i As Integer
Dim IE As Object
Dim text As String
i = 1
Do Until i > 10
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
cellnum = Range(ActiveCell.Offset(i, 7).Address)
With IE
.navigate cellnum.Value
Do While .Busy And .readyState <> 4: DoEvents: Loop
Sleep 1000
text = .Document.getElementsByClassName("classname")(1).outerText
End With
ws.Cells(i, 12).Value = text
i = i + 1
IE.Quit
Loop
End Sub
链接到网页的链接保存在单元格中,因此是Cellnum代码。找到正确的单元格,检索其中的网页,然后移动到其下方的单元格。该代码在前3个迭代中正常工作,但由于某种原因,该代码在第四次失败。错误代码标识" text = .document.getElementsbyclassName ..."行为错误。
我认为您的问题可能是由于网页上不存在的元素。如果确实存在,您是否确定您正在从集合中提取正确的元素?
尝试使用
运行它.document.getElementsByClassName("classname")(0).outerText.
如果有效,那么我建议您查看网页上的类" className"的元素。而在其他页面上,您可能有2个或更多元素,但可能是在第三页上只有一个。
您可以发布要刮擦的网页吗?
找到了解决方案!Sleep.1000命令在所有情况下都没有提供足够的时间,我想代码正在尝试在一个页面可用之前提取数据。我以为那里的循环可以解决这个问题,但我想不是(对此非常新(。无论如何,我将其更改为睡眠。3000使我的缓慢的互联网足够赶上,它像梦一样工作。
感谢所有人的帮助。