【问题标题】:How can I get an element of web page to display in excel Web Browser如何让网页元素显示在 excel Web 浏览器中
【发布时间】:2016-11-13 22:25:57
【问题描述】:

如何获取已确定网页的特定元素以在 excel WebBrowser 中显示它,例如 <img><iframe><audio><a> ...等。

如果图像不是以下网页的一部分,我知道如何显示图像。

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

但我不知道如何从任何网页通过 id 或类名获取元素。

【问题讨论】:

  • 请提供您要显示的特定网页 URL 和元素的示例。
  • OK @omegastrips 有链接translate.google 并且有一个元素class="gt-baf-table"

标签: vba excel web-scraping


【解决方案1】:

这是一个示例,展示了如何从the webpage translate.google.com.eg 中检索class="gt-baf-table" 元素,并将其放入UserForm1 上的WebBrowser1 控件中:

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 上的结果输出如下:

同样的片段在 Chrome 中呈现:

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多