首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用getElementById VBA VBA抓取

使用getElementById VBA VBA抓取
EN

Stack Overflow用户
提问于 2019-02-04 10:50:12
回答 1查看 154关注 0票数 0

下面的宏在使用getElementsByClassName从某个范围内的网页中提取数据时工作得很好,但我需要将其更改为getElementsById,因为类名不是唯一的。这里的任何帮助都将不胜感激。

代码语言:javascript
复制
Dim oHtml As HTMLDocument
Dim oElement As Object
Dim url As String
Set oHtml = New HTMLDocument

Application.ScreenUpdating = False

Sheets("ASIN").Range("A1:A100").ClearContents

url = Sheets("ASIN").Range("L2").Value


With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.send
oHtml.body.innerHTML = .responseText
End With


Set oElement = oHtml.getElementsByClassName("a-color-price")
For i = 0 To oElement.Length - 1
 Sheets("ASIN").Range("A" & (i + 1)) = oElement(i).innerText
Next i
Application.ScreenUpdating = True

任何帮助我们使用getElementById的人都将不胜感激。

所附网页查看截图

EN

回答 1

Stack Overflow用户

发布于 2019-02-04 12:13:25

我不确定您指向的是哪个URL,但我在屏幕截图中看到了一些TR元素,以及一些TD元素。请参阅下面的示例代码,并尝试将其转换为您的特定用例。

代码语言:javascript
复制
Sub Dow_HistoricalData()

    Dim xmlHttp As Object
    Dim TR_col As Object, Tr As Object
    Dim TD_col As Object, Td As Object
    Dim row As Long, col As Long

    ThisSheet = ActiveSheet.Name
    Range("A2").Select
    Do Until ActiveCell.Value = ""
    Symbol = ActiveCell.Value
    Sheets(ThisSheet).Select
    Sheets.Add

    Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
    myURL = "https://www.fxstreet.com/economic-calendar"
    xmlHttp.Open "GET", myURL, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send

    Dim html As Object
    Set html = CreateObject("htmlfile")
    html.body.innerHTML = xmlHttp.responseText

    Dim tbl As Object
    Set tbl = html.getElementById("fxst-calendartable")


    row = 1
    col = 1

    Set TR_col = html.getElementsByTagName("TR")
    For Each Tr In TR_col
        Set TD_col = Tr.getElementsByTagName("TD")
        For Each Td In TD_col
            Cells(row, col) = Td.innerText
            col = col + 1
        Next
        col = 1
        row = row + 1
    Next

Sheets(ActiveSheet.Name).Name = Symbol
Sheets(ThisSheet).Select
ActiveCell.Offset(1, 0).Select

Loop

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54509641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档