2017-06-14 79 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