2016-05-14 21 views
1

はどうすればExcelのWebブラウザで表示するWebページの要素を取得することができ、私はなど<code><img></code>またはまたは<code><audio></code>または<code><a></code> ...のような例として、エクセルWebブラウザーに表示するために決定したWebページの特定の要素を取得できますか

私は次のようにウェブページの一部でない場合、イメージを表示する方法を知っています。

WebBrowser1.Navigate "about:blank" 
WebBrowser1.Document.Write "<img style=""width:100%;"" src=""http://www.sthua.edu.sg/images/vba-logo.jpg"">" 

しかし、どのWebページからでもidやクラス名で要素を取得する方法はわかりません。ここ

+0

表示する特定のウェブページのURLと要素の例を示してください。 – omegastripes

+0

OK @omegastrips alink [translate.google](https://translate.google.com.eg/?hl=ar&tab=wT#en/ar/boy)があり、 'class =" gt-bafという要素があります-table "' –

答えて

0

the webpage translate.google.com.egからclass="gt-baf-table"要素を取得し、UserForm1WebBrowser1制御にそれを配置する方法を示す例である:

Option Explicit 

Sub Test() 

    Dim objIE As Object 
    Dim objNode As Object 
    Dim objTable As Object 
    Dim strHtmlContent As String 
    Dim colSSheets As Object 
    Dim objSSContent As Object 
    Dim varSSheet 
    Dim objWB As Object 
    Dim objHead As Object 
    Dim varCssNumber 

    ' instantiate IE, navigate and get target DOM element 
    Set objIE = CreateObject("InternetExplorer.Application") 
    objIE.Visible = True ' for debug only 
    objIE.Navigate "https://translate.google.com.eg/?hl=ar&tab=wT#en/ar/boy" 
    Wait objIE 
    WaitElementById objIE, "gt-lc" 
    ' retrieve HTML content 
    Set objNode = objIE.Document.GetElementById("gt-lc") 
    Set objTable = objNode.GetElementsByClassName("gt-baf-table")(0) 
    strHtmlContent = objTable.outerHTML 
    strHtmlContent = "<body dir=rtl>" & strHtmlContent & "</body>" 
    ' retrieve CSS content 
    Set colSSheets = objIE.Document.styleSheets 
    Set objSSContent = CreateObject("Scripting.Dictionary") 
    For Each varSSheet In colSSheets 
     objSSContent(objSSContent.Count) = varSSheet.cssText 
    Next 
    objIE.Quit 
    ' Init UserForm, WebBrowser 
    UserForm1.Show 
    Set objWB = UserForm1.WebBrowser1 
    objWB.Navigate "about:blank" 
    Wait objWB 
    ' put HTML and CSS content into WebBrowser 
    With objWB.Document 
     .Write strHtmlContent 
     Set objHead = .GetElementsByTagName("head")(0) 
     For Each varCssNumber In objSSContent 
      objHead.appendChild .createElement("style") 
      .styleSheets(.styleSheets.Length - 1).cssText = objSSContent(varCssNumber) 
     Next 
    End With 

End Sub 

Sub Wait(objIE) 
    Do While objIE.ReadyState < 4 Or objIE.Busy 
     DoEvents 
    Loop 
    Do Until objIE.Document.ReadyState = "complete" 
     DoEvents 
    Loop 
End Sub 

Sub WaitElementById(objIE, strId) 
    Do While IsNull(objIE.Document.GetElementById(strId)) 
     DoEvents 
    Loop 
End Sub 

次のようUserForm1に得られた出力は:

UserForm1

Chromeでレンダリングされた同じフラグメント:

Chrome

+0

本当にとてもきれいな仕事です。 –

関連する問題

 関連する問題