【发布时间】:2015-07-20 05:10:09
【问题描述】:
早上,
我在使用 Excel 的网页抓取时遇到问题,其中 getelementsbyclassname 无法对某些对象采取行动,引发“对象不支持此属性或方法”错误。
当我输入 getelementsbyclassname 的对象本身是 getelementsbyclassname 方法的结果时,就会出现问题。我不知道为什么,特别是当我作用于一个更大的对象时,我可以得到类名......
这是一段代码摘录
''''Boring Variables Declaration I've cut out''''
'Initialise IE
Dim IEApp As New InternetExplorer
Set IEApp = New InternetExplorer
IEApp.Visible = True 'JB
'Open page and wait for page to load
IEApp.navigate ("http://www.anicewebsite.com")
Do Until IEApp.readyState = READYSTATE_COMPLETE And IEApp.Busy = False
DoEvents
Loop
Set HTMLdoc = IEApp.document
Set RefLocation = Sheets("INFO_DUMP").Range("LocationRefCell")
Set trElements = HTMLdoc.getElementsByClassName("basic-details")
For Each trElement In trElements
'Select the LHS box and extract info
Set tdElement = trElement.getElementsByClassName("tieredToggle")
'write start/end locations
'''''THIS NEXT LINE THROWS AN ERROR'''''
Data_str = tdElement.getElementsByClassName("title").innerText
'''''AS DOES'''''
MyObject=tdElement.getElementsByClassName("title")
RefLocation.Offset(1, 2).Value = Data_str
Next 'close tr Loop
但是,我可以通过
获取“标题”对象For Each trElement In trElements
Set MyObject=trElement.getElementsByClassName("title")
Next 'close tr Loop
所以错误可能是关于 tdElement(一个 DispHTMLElement 集合)的问题,我试图附上它的图像但我缺乏声誉(请参阅帖子末尾的链接)...
非常感谢您的帮助。
PS。该网页的结构大致有一个 2 列表,我用“基本详细信息”隔离其行。第一列是“分层切换”,然后我想要的项目是内部文本,例如。 “标题”。我需要使用 tieredtoggle,因为每列中的对象都有重复的类名
【问题讨论】:
-
tdElement是一个集合,您必须像为trElements做的那样循环遍历它 -
哦,你是绝对的明星。完全正确 - 我需要循环访问对象的属性。谢谢,虽然看起来有点不雅,有没有办法选择元素,然后在没有对象循环的情况下直接处理它们?如果 getelementsbyclassname 选择单个对象,我什至必须这样做......
-
如果您总是需要处理第一个元素,您可以使用此表示法:
tdElement(0)(集合中的第一项),或者您可以使用 getElementById() 并提供第一个元素的 id。更多信息this Mozilla page
标签: excel getelementsbyclassname vba