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标签的屏幕截图真正的网页)]
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 Controls
和Microsoft 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
你可以参考这个答案的答案类似的答案。