html - 从网页单击 Excel 图标的 VBA 代码

标签 html excel vba web web-scraping

我正在尝试自动单击 Excel 图标操作以使用 VBA 从以下链接下载 Excel 数据 Financial Statement of a Firm
下面是该 Excel 图标的 html 代码

<div class="fri nav-item-right">
           <a onclick="changPeriod(2);" class="red" id="hang_quy" style="cursor:pointer;">Hàng quý</a>"|"
           <a onclick="changPeriod(1);" id="hang_nam" style="cursor:pointer;" class="">Hàng năm</a>
           <span class="curp"><img src="/images/icon-excel.jpg" alt="#" id="divPoints"></span>
 </div>

下面的 VBA 代码旨在触发 Excel 图标单击操作。
    URL = "http://finance.tvsi.com.vn/Enterprises/FinancialStatements?symbol=AAA" ' & Range("TickerName")
Set objIE = CreateObject("InternetExplorer.Application")
ThisWorkbook.Activate
objIE.Visible = True
objIE.navigate URL

Do While objIE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

Set HTMLDoc = objIE.document
Set oHTML_Elements = HTMLDoc.getElementsByClassName("fri nav-item-right")

    For Each oHTML_Element In oHTML_Elements
        For Each oHTML_Element_Li In oHTML_Element.getElementsByTagName("span")
            oHTML_Element_Li.Children(0).Click
        Next
    Next

    Do While objIE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop

     objIE.Quit
发生的事情是单击了 Web 元素标记名称“a”,而不是属于标记名称范围的 Excel 图标。
从上面的代码中我做错了什么?如果可能的话,请让我知道您对单击此 Excel 图标的想法。
感谢您阅读这篇文章,我期待收到您的建议。
此致
BK

最佳答案

这是从该站点下载 excel 文件的有效方法之一。当您执行以下宏时,您应该会在眨眼之间下载文件。您可以稍后按照您想要的方式格式化单元格。
顺便说一句,无论您是手动下载文件还是使用脚本下载文件,下载的 excel 文件一打开就会出现警告。但是,您可以忽略该警告并打开文件而不会出现任何问题。

Sub DownloadExcel()
    Const URL$ = "http://finance.tvsi.com.vn/Enterprises/BangCanDoiKeToan?"
    Dim aBody As Variant, sPath$, params$

    params = "symbol=AAA&YearView=2021&period=2&donvi=1000000"
    
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL & params, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36"
        .send
        aBody = .responseBody
        sPath = ThisWorkbook.Path & "\" & "output.xls"
    End With
    
    With CreateObject("ADODB.Stream")
        .Type = 1
        .Open
        .write aBody
        .SaveToFile sPath, 2
        .Close
    End With
End Sub

关于html - 从网页单击 Excel 图标的 VBA 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68516608/

相关文章:

html - 视频框不会出现在 safari 中

javascript - Web 浏览器缓存问题

algorithm - 在 VBA 中无故跳过循环

vba - 更改范围的条件格式

vba - 带有组合框参数的 MS Access 查询不返回任何结果

html - 两个并排的div,右边的宽度由其内容决定,左边的占用所有可用空间?

vba - 使用 VBA 在 Excel 中选择形状

asp.net - 使用 SendGrid 从 Azure 发送带有附件的电子邮件

excel - 如何将工作表变量传递给另一个子

jquery - 当它们被设置为 0 时图像有填充/边距