VBA使用Internet Exporer单击项目

VBA使用Internet Exporer单击项目,vba,internet-explorer,web,screen-scraping,Vba,Internet Explorer,Web,Screen Scraping,我的公司使用基于网络的报告系统,我正在尝试将数据自动导出到Excel。有一个带有文件>导出到XLS的标准下拉菜单,我想自动单击“导出”按钮下载报告 我读过其他关于点击按钮展开页面,或在表单中输入值等的帖子,但可能是因为按钮位于下拉菜单中,或者因为元素位于iframe中,以前发布的解决方案都不适用于我 到目前为止: 我可以导航到该页面 我可以得到menuExportXLS元素 Debug.print打印正确的innerText 我的代码没有抛出任何错误 但我无法成功单击按钮下载文件。 或者,H

我的公司使用基于网络的报告系统,我正在尝试将数据自动导出到Excel。有一个带有文件>导出到XLS的标准下拉菜单,我想自动单击“导出”按钮下载报告

我读过其他关于点击按钮展开页面,或在表单中输入值等的帖子,但可能是因为按钮位于下拉菜单中,或者因为元素位于
iframe
中,以前发布的解决方案都不适用于我

到目前为止:

  • 我可以导航到该页面
  • 我可以得到
    menuExportXLS
    元素
  • Debug.print
    打印正确的
    innerText
  • 我的代码没有抛出任何错误
但我无法成功单击按钮下载文件。

或者,HTML中有一个javascript
onclick
脚本可以触发下载,但我不知道如何在VBA中调用它。我很乐意让任何一种方法运行

子导出xlstest()
Dim应用程序作为InternetExplorerMedium
作为对象的Dim Obj
Set appIE=New InternetExplorerMedium
苏尔=”https://Site"
和阿皮
.导航sURL
.Visible=True
以
在appIE.Busy或appIE.ReadyState 4时执行
多芬特
环
Application.Wait(现在+时间值(“0:00:05”))
Set Obj=appIE.document.getElementsByTagName(“iframe”)(0.contentDocument.getElementById(“menuExportXLS”)
Debug.Print Obj.innerText
对象。单击
设置appIE=Nothing
端接头

您可以使用CSS选择器以元素为目标

appIE.document.getElementsByTagName("iframe")(0).contentDocument.querySelector("[onclick*='exportXLS']").Click

这是一个属性=值选择器,它以内容文档中具有
onclick
属性的第一个元素为目标,该属性包含值
exportXLS

可能的重复项。(如果这一个不合适,那么还有很多其他的,这是一个非常常见的问题。)您将获得列表项,但单击处理程序位于子元素
上。可能尝试
Obj.getElementsByTagName(“a”)(0)。单击
不是对象吗?@Tim Williams我尝试过这个,但不幸的是它没有得到元素。我很确定这是因为元素在
iframe
中,我很确定在一个框架中不会有任何影响-如果你可以得到列表项,你应该可以从该列表项中找到链接元素。。。
appIE.document.getElementsByTagName("iframe")(0).contentDocument.querySelector("[onclick*='exportXLS']").Click