Excel VBA刮取HTML文档中的CSS元素

时间:2017-06-14 15:44:53

标签: html css excel vba excel-vba

以下是我试图从中获取的HTML文档的一部分:

<div id="abc" class="outer">   
    ::before
    <div class="inner"></div>
    ::after
</div>

我尝试使用

获取此代码段的innerHTML
Set Elements = Document.getElementsByClassName("outer")
MsgBox Elements(0).innerHTML

消息框中弹出的唯一内容是(不带引号):

"<div class="inner"></div>"

innerHTML似乎忽略了CSS伪元素之前的:: before和::之后。有没有办法抓住这些或确定它们是否在那里?

我问的原因是,当我尝试自动化的应用程序处于加载状态时,:: before和:: after元素就在那里。一旦它处于加载状态,这些元素就会消失。

谢谢

1 个答案:

答案 0 :(得分:1)

我明白了。我最终使用了一种不同于尝试查找:: before和:: after的方法。

注意: 我观察了HTML文档在搜索过程中如何变化,并注意到当应用程序进入或退出加载状态时,我上面包含的HTML片段的父代已更改。

<div id="snippetParent" class="overlay" style="width: 100%; height: 100%; top: 0px; left: 0px; position: absolute; display: block;">

    <div id="abc" class="outer">
        <div class="inner"></div>
    </div>

</div>

&#34; Style&#34;属性&#34;显示&#34;属性更改为&#34;显示:块&#34;加载时,改为&#34;显示:无&#34;当它没有加载。

如果应用程序加载时间太长,还会出现一个弹出窗口(弹出ID为&#34; popup&#34;出于此问题的目的)。这个弹出窗口使上面提到的样式从块到无。我必须在while循环中包含弹出窗口出现的条件。

&#34; good&#34; boolean为false,直到任何加载指示消失。然后它变为真,因此退出while循环。

这是我的代码:

Do While good = False
    For Each tx In Split(Document.getElementById("snippetParent").Style.cssText, "; ")
        If tx = "display: block" Then
            good = False
            UpdateBrowser BB:=Browser, waitSeconds:="02"
        ElseIf tx = "display: none" Then
            txtDocument = ""
            On Error Resume Next
            txtDocument = Document.getElementById("popup").innerHTML

            If txtDocument = "<b>Retrieving Data...</b>" Then
                Beep
                UpdateBrowser BB:=Browser, waitSeconds:="02"
            Else
                good = True
            End If
        Else
            'Not display
        End If
    Next tx
Loop