【问题标题】:getelementsbyclassname Excel vba - error on repeated callsgetelementsbyclassname Excel vba - 重复调用错误
【发布时间】: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,因为每列中的对象都有重复的类名

http://i.stack.imgur.com/1tyb6.png

【问题讨论】:

  • tdElement 是一个集合,您必须像为 trElements 做的那样循环遍历它
  • 哦,你是绝对的明星。完全正确 - 我需要循环访问对象的属性。谢谢,虽然看起来有点不雅,有没有办法选择元素,然后在没有对象循环的情况下直接处理它们?如果 getelementsbyclassname 选择单个对象,我什至必须这样做......
  • 如果您总是需要处理第一个元素,您可以使用此表示法:tdElement(0)(集合中的第一项),或者您可以使用 getElementById() 并提供第一个元素的 id。更多信息this Mozilla page

标签: excel getelementsbyclassname vba


【解决方案1】:

您可以使用它来获取内部文本。

Data_str = tdElement.getElementsByClassName("title")(0).innerText

您可以输入元素所在的索引值,而不是 ("title")(0)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    相关资源
    最近更新 更多