2017-06-14 76 views
0

在这里发现的Excel VBA刮CSS元素是,我试图刮从HTML文档的一部分: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元素在那里。一旦它不在加载状态,这些元素就消失了。

谢谢

+0

我不认为这是可能的内嵌样式。 – tech2017

+0

相关:[之前::和之后的意思是什么?](https://stackoverflow.com/questions/22484020/what-do-before-and-after-mean) – Jeeped

+0

如果您在文本中获取HTML响应而不是xmldom你可以字符串操作来提取'class =“outer”>“之后和之前的所有内容 我必须在工作中创建一个字符串操作函数来处理编写不好的HTML代码,这些代码不会加载到xmldom对象,它适用于大型html文件。 – jamheadart

回答

0

我想通了。我结束了使用不同的方法,而不是试图找到:: 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> 

“样式”属性的“显示”属性更改为“显示:块”,而加载,并改为“显示:无”当它不加载。

如果应用程序的加载时间过长(对于此问题弹出ID为“弹出”),也会出现一个弹出窗口。这个弹出使得上面提到的风格从块到无。我必须在弹出窗口出现时的条件下包含while循环。

“好”的布尔值是假的,直到任何加载指标消失。然后它变为真,因此退出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