我正在尝试从我们公司的一个使用HTML的公司内部网站提取数据。我试图点击的按钮是一个CSV按钮,但尽管尝试了不同的方法,我无法让VBA找到这个元素。
我可以获得VBA打开网页,但我对HTML一无所知,因为我一直使用其他数据无效方法,
我已经尝试了usig .getElementsByClassName但我收到的对象不支持这种方法。
使用getElementsById允许我传递此但objElement然后不支持.Click
Sub OpenIE()
Dim IE As InternetExplorerMedium
Set IE = New InternetExplorerMedium
Dim HTMLDoc As HTMLDocument
Dim objElement As HTMLObjectElement
With IE
.Visible = True
.Navigate "internal website link"
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: Wend
Set HTMLDoc = .document
Set objElement = HTMLDoc.getElementById("btn btn-default buttons-csv buttons-html5")
objElement.Click
.Quit
End With
Set IE = Nothing
End Sub
HTML按钮代码:
<a class=" "btn btn-default buttons-csv buttons-html5" tabindex="0" aria-controls="inboundTransfersTable" href="#"><span>CSV</span></a>
最终结果是允许CSV作为新的Excel工作簿/工作表打开,因为我非常熟悉排序/过滤数据。
由于缺乏知识,我不得不在路径上找到意大利面条代码的道歉
任何帮助将不胜感激
谢谢
尝试在css选择器中使用单个类
HTMLDoc.querySelector(".buttons-csv").click
这个
btn btn-default buttons-csv buttons-html5
是一个复合类,每个空格代表一个新类名的开头。可能只匹配一个类(首选)。我选择了buttons-csv
。你可以简单地用“。”加入类。在选择器内部,以向选择器添加更多类,例如
.btn.btn-default
这在选择器中有两个类。
定时循环以确保元素存在:
Dim t As Date, ele As Object
Const MAX_WAIT_SEC As Long = 10
t = Timer
Do
On Error Resume Next
Set ele = HTMLDoc.querySelector(".buttons-csv")
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While ele Is Nothing
If Not ele Is Nothing Then
ele.Click
End If