getelementsbyclassname Excel vba-重复调用时出错
早上好 我遇到了来自Excel的webscrape的问题,getelementsbyclassname无法对某些对象执行操作,引发了“对象不支持此属性或方法”错误 当我输入到getelementsbyclassname的对象本身是getelementsbyclassname方法的结果时,就会出现问题。我不知道为什么,特别是当我在一个更大的对象上操作时可以得到类名 下面是一段代码摘录getelementsbyclassname Excel vba-重复调用时出错,excel,getelementsbyclassname,vba,Excel,Getelementsbyclassname,Vba,早上好 我遇到了来自Excel的webscrape的问题,getelementsbyclassname无法对某些对象执行操作,引发了“对象不支持此属性或方法”错误 当我输入到getelementsbyclassname的对象本身是getelementsbyclassname方法的结果时,就会出现问题。我不知道为什么,特别是当我在一个更大的对象上操作时可以得到类名 下面是一段代码摘录 ''''Boring Variables Declaration I've cut out'''' 'Initi
''''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(一个DispHtmleElement集合)的,我试图附加它的一个图像,但我缺乏声誉(请参阅本文末尾的链接)
非常感谢你的帮助
另外,该网页的结构大致上是一个2列的表格,我用“基本细节”分隔了其中的行。第一列是“分层切换”,然后我想要的项目是内部文本,例如“标题”。我需要使用tieredtoggle,因为每列中的对象都有重复的类名
您可以使用它来获取内部文本
Data_str = tdElement.getElementsByClassName("title")(0).innerText
您可以在元素所在的位置输入索引值,而不是(“title”)(0)。
tdElement
是一个集合,您必须像处理treelements
一样循环它。哦,您是一个绝对的明星。完全正确-我需要循环访问对象的属性。不过,Thankyou看起来有点不雅观,有没有一种方法可以选择元素,然后不使用对象循环直接处理它们?如果GetElementsByCassName选择单个对象,我甚至必须这样做……如果您总是需要处理第一个元素,则可以使用以下符号:tdElement(0)
(集合中的第一项),或者您可以使用getElementById()并提供第一个元素的id。更多关于