getElementsByTagName(“div”)未检测到所有div的

时间:2018-02-22 02:49:56

标签: javascript vba excel-vba excel

我一直在从许多网站上搜索数据而没有任何问题,并且轻松地一遍又一遍地使用相同的代码。但是,我工作的网页/ java是我无法轻易使用的。它比我使用的更强大。

标签结构如此,

div div div div ... div(打开最后一个div,我跟着它到达目的地。)
-div
--div
--- div
---- iframe
-----身体
------ div
------- div
-------- div
(等等更多div)
最后...
------------- div Id = entity_list
-------------- Span id = name
-------------- Span entityid = 123456798
然后以相反的顺序关闭所有备份。

如果我在设置IE对象等后使用下面的代码,以前从来没有遇到过问题。

 Set Elements = IE.Document.getElementsByTagName("div")
 I = 2

     For Each Element In Elements
            Worksheet.range(I, 2) = Element.ID
            I = I + 1
     Next

然而,此代码未到达(div ... div)内的div。它只会在外面拾取所有div。我不确定这会考虑什么类型的div ...嵌入式div?所以我没有运气尝试所有替代解决方案来达到“Span Id”和“Span entityid”。

我已经为div,span,iframe,body尝试了getelement(type)的所有变体,但它就好像它们不存在一样。

如果我尝试像Dim oHtml As HTMLDocument这样的代码,我总是会出错。我认为它可能是一个参考问题但不知道我需要什么。我不知道它是否会改变任何东西。

我正在工作的页面中还有很多java脚本。但他们从来没有让我遇到任何问题。

任何人都可以帮我理解我需要如何更改代码吗?我不是专家。

Snip of the source code

经过一段时间的睡眠和新面貌,我现在相信它的“!DOCTYPE html”导致了这个问题。除此之外,代码不会读取任何类型。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

所以解决方案非常简单,我只需要添加.contentDocument来访问Iframe中的元素。一旦我这样做,我就会寻找元素“Span”。从来没有处理过iframe,这对我来说是个新手。

    Set Elements= IE.Document.getElementById("iframeid").contentDocument
    I = 1
    For Each Element In Elements.getElementsByTagName("span")

        ActiveSheet.Cells(I, 3) = Element.ID
        ActiveSheet.Cells(I, 2) = Element.innertext
    I = I +1

    Next Element

谢谢,我能够通过更多的线索搜索和新鲜的眼睛来弄明白。