VBA与HTML交互:当HTML标签只有HREF和CLASS名称时,如何点击下拉菜单

在这里,我正在尝试使用一个实例来复制我在安全networking中遇到的一个问题,以便有人可以帮助我find解决scheme。

实际上,我打开了一个问题( VBA:如何在HREF和CLASS HTML标签的帮助下单击网页中的下拉菜单 ),但是我找不到解决scheme。

预期结果:帮助我打开网页的代码( https://www.amazon.in/ ),并使用HTML标记CLASS和HREF从菜单栏导航到下拉菜单( Today's Deal )。 [样本(网站)给这里有“tabindex”,但请不要使用这个解决scheme,因为在我真的情况下,我没有任何其他标签除了HREF和类(请find我的HTML标签的屏幕截图真正的网页)]

真正的情况,只是把它保留在这里作为一个原因,我不想用tabindex作为解决方案 Img1:真实的情况,只是让它在这里,让你明白,我只有这两个标签

VBA代码

Sub Click_aLinkorDropdown() Dim MyHTML_Element As IHTMLElement Dim MyURL As String 'On Error GoTo Err_Clear MyURL = "https://www.amazon.in/" Set MyBrowser = New InternetExplorerMedium MyBrowser.Silent = True MyBrowser.navigate MyURL MyBrowser.Visible = True For Each MyHTML_Element In HTMLDoc.getElementsByClassName("nav-a") If InStr(MyHTML_Element.href, "/gp/goldbox/ref=nav_cs_gb") Then MyHTML_Element.Click Exit For Next 'Err_Clear: 'If Err <> 0 Then 'Err.Clear 'Resume Next 'End If End Sub 

HTML标签

 href='/gp/goldbox/ref=nav_cs_gb' class='nav-a' tabindex='22'>Today's Deals</a><a 

问题我正在通过使用此代码面临的网页打开,当它到达点击链接我得到两种types的错误1:>运行时错误438:对象不支持此属性或方法

2:>运行时错误424:需要对象

而且我也尝试了一个在StackOverflow中可用的post,但这不适合我

使用以下代码并记住启用引用Microsoft Internet ControlsMicrosoft HTML Object Library

 #If VBA7 Then Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Sub test() Dim IE As Object Dim HTMLDoc As Object Dim sURL As String ' CREATING OBJECT Set IE = CreateObject("internetexplorer.application") sURL = "https://www.amazon.in/" ' WEBPAGE NAVIGATION With IE .Navigate (sURL) .Visible = True End With WaitIE IE, 2000 ' CLICK ON LOG IN Set HTMLDoc = IE.Document Set buttonclick = HTMLDoc.getElementsByClassName("nav-a") For Each Element In buttonclick If Element.href = "https://www.amazon.in/gp/goldbox/ref=nav_cs_gb" Then Element.Click Next Element WaitIE IE, 5000 'IE.Quit 'Set IE = Nothing End Sub Sub WaitIE(IE As Object, Optional time As Long = 250) 'Code from: https://stackoverflow.com/questions/33808000/run-time-error-91-object-variable-or-with-block-variable-not-set Dim i As Long Do Sleep time Debug.Print CStr(i) & vbTab & "Ready: " & CStr(IE.READYSTATE = 4) & _ vbCrLf & vbTab & "Busy: " & CStr(IE.Busy) i = i + 1 Loop Until IE.READYSTATE = 4 Or Not IE.Busy End Sub 

你可以参考这个答案的答案类似的答案。