2017-06-21 62 views
1

我完全難住。我正在使用VBA的Internet Explorer對象解析谷歌圖像搜索的HTML。當我檢查與Chrome的內置工具的元素,我得到的HTML作爲這樣的事:從HTML元素背景丟失解析樣式

<a href="/imgres?imgurl=...&amp;imgrefurl=...&amp;docid=...&amp;tbnid=...&amp;vet=...&amp;w=1366&amp;h=768&amp;bih=638&amp;biw=1366&amp;q=cats&amp;ved=...;iact=mrc&amp;uact=8" jsaction="fire.ivg_o;mouseover:str.hmov;mouseout:str.hmou" class="rg_l" rel="noopener" style="background: rgb(200, 190, 194); width: 270px; height: 168px; left: 0px;"><img class="rg_ic rg_i" data-sz="f" name="z7O-qKoPKHzyaM:" alt="Image result for cat's" jsaction="load:str.tbn" onload="google.aft&amp;&amp;google.aft(this)" src="data:image/jpeg;base64,/9j/4AAQ..." style="width: 300px; height: 168px; margin-left: -15px; margin-right: -15px; margin-top: 0px;"><div class="_aOd rg_ilm"><div class="rg_ilmbg"><span class="rg_ilmn"> 1366&nbsp;×&nbsp;768 - wallpapercave.com </span></div></div></a> 

或者作爲一個圖片(對不起,不知道如何格式化)

HTML image

有樣式集中的「背景」值,我希望得到它。但是,我似乎無法在任何地方找到它。當我使用Chrome瀏覽器的檢測工具瀏覽「屬性」時,沒有「樣式」選項可供查看。 InnerHTML不包含一些Style元素,但不包含「背景」。 並通過VBA

HTMLelement.getAttribute("Background") = "" 
HTMLelement.Style.Background = "" 
HTMLelement.Style.BackgroundColor = "" 

這是怎麼回事去,爲什麼我可以看到一個背景屬性使用網頁檢查的時候,但通過上述手段無法訪問它?

+0

@使用GustafGunér沒有JS,這是一個VBA應用程序(我猜使用一些通用的面向對象的方法年齡)。作爲一個總結,我將一個名爲'objIE'的InternetExplorer.Application導航到谷歌圖片頁面,等待它加載,然後:'Set elem = objIE.document.getElementById(「rg_s」)。getElementsByTagName(「IMG」 )(0).ParentElement'其中'elem'是'IHTMLElement'我指的是在我的問題中(我把它展開了更多的行,但這就是想法) – Greedo

回答

0

爲此,可以使用目標anchor元件的getAttribute("style")方法。然後style是類型IHTMLStyle其中有背景顏色的字符串屬性。 HTH

Option Explicit 

' Add reference to Microsoft Internet Controls (SHDocVw) 
' Add reference to Microsoft HTML Object Library 

Const url As String = "your-url-here" 

Sub GetInlineStyle() 
    Dim ie As SHDocVw.InternetExplorer 
    Dim doc As MSHTML.HTMLDocument 

    Debug.Assert Trim(url) <> "" 
    Set ie = New SHDocVw.InternetExplorer 
    ie.Visible = True 
    ie.navigate url 

    While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE 
     DoEvents 
    Wend 

    Set doc = ie.document 

    ' Get target anchor element which contains the background color 
    Dim anchor As HTMLAnchorElement 
    Set anchor = doc.querySelector("a[class=rg_l]") 

    ' Use getAttribute("style") to get style of anchor 
    Dim style As IHTMLStyle 
    Set style = anchor.getAttribute("style") 

    ' IHTMLStyle has string property backgroundColor 
    Dim bgrColor As String 
    bgrColor = style.backgroundColor 
    Debug.Print bgrColor 

    ie.Quit 
End Sub 

輸出

rgb(200, 190, 194) 

HTML使用

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<!-- saved from url=(0016)http://localhost --> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Stackoverflow Greedo</title> 
</head> 

<body> 
    <div class="content"> 
     <a href="https://stackoverflow.com" class="rg_l" rel="noopener" 
      style="background: rgb(200, 190, 194); width: 270px; height: 168px; left: 0px"> 
      Stackoverflow Greedo  
     </a> 
    </div> 
</body> 

</html> 
+0

嗯,當'style.backgroundColor'返回「」時使用[this](https://www.google.co.uk/search?q=stack+overflow&tbm=isch)圖片搜索 - 即使「anchor」確實指向頁面上的正確元素。我使用IE檢查器而不是Chrome瀏覽器,並且沒有發現「背景」屬性的痕跡。這導致2猜測;首先這個屬性對於Chrome來說是唯一的,其次,一旦加載了圖像,一些ajax腳本就會刪除IE中的屬性。除非你能想到如何在IE中獲取數據,否則我可能不得不使用Selenium? – Greedo

+0

@Greedo現在提供的鏈接,我可以完全杜絕你的問題:)。但正如你所寫,在IE中沒有這樣的內聯風格。所以'style.backgroundColor'的結果是正確的,我無法用它做任何事情:(。 – dee