我正在降落在一个菜单上的网页上,看起来像
Client
contact history list inquiry
contact history list
Client Search
Client Service
当您单击项目(例如:客户端)时,子项目出现。如果单击子项目,它将带您进入新页面。
我试图使用VBA自动化这两个步骤。但是我没有运气。这是相关的HTML
倒塌
<P tabIndex=0 class=inactiveMenuItem _submenuid="menuLevel10" _ingeniummenuid="00100">Client</P>
<UL id=menuLevel10 class=hiddenMenu _ingeniummenuid="00100" _parentmenuid="menuLevel1"></UL></LI>
扩展
<P tabIndex=0 class=inactiveMenuItem _submenuid="menuLevel10" _ingeniummenuid="00100">Client</P>
<UL id=menuLevel10 class=visibleMenu _ingeniummenuid="00100" _parentmenuid="menuLevel1" _populated="true">
<LI><A class=inactiveMenuItem href="#" _flowname="BF1325InqList">Contact History List Inquiry</A></LI>
<LI><A class=inactiveMenuItem href="#" _flowname="BF1324List">Contact History List</A></LI>
我尝试了这样的事情
Dim objIE As New InternetExplorerMedium
Dim objDoc As HTMLDocument
Dim objElement As IHTMLElement
'go to website
objIE.Navigate ("http://SOMESITE.COM") (not the real site)
objIE.Visible = True
'sleep half seconds until page is loaded
Do Until objIE.ReadyState = READYSTATE_COMPLETE
Sleep (500)
Loop
'click on menu item
Set objDoc = objIE.Document
Set objElement = objDoc.getElementById("menuLevel10")
objElement.Click
不起作用。我还试图使用Fireevent功能触发OnClick事件,但这也不起作用。任何帮助都将受到赞赏。我对HTML的了解非常有限,因此请告诉我是否应该添加更多HTML源代码或是否缺少信息。
编辑:如果它更改任何内容,这是一个Intranet网站
您可以用selenium解决此问题(https://github.com/florentbr/seleniumbasic)
在计算机中安装硒并将其包括在Excel的参考文献中。
浏览此类网站的代码将是:
Dim Browser As New Selenium.IEDriver
Browser.get "http://SOMESITE.COM"
browser.wait 5000
browser.findElementById("menuLevel10").click
我解决了我的问题。基本上,我需要单击的元素不是由ID引用的,因此我必须循环所有元素,直到找到所需的元素(我使用InnerHTML属性来获得匹配)。一旦我拥有元素对象,我就可以单击它,并且它可以执行该操作。我有时间时会添加一个代码示例
类似这样的东西
Do Until objdoc.body.all(lngIdx).innerHTML = "Client"
lngIdx = lngIdx + 1
If lngIdx = objdoc.body.all.Length Then
MsgBox "Could not find Menu Item"
Exit Function
End If
Loop
objdoc.body.all(lngIdx).Click
,然后为子菜单的同一件事
Do Until objdoc.body.all(lngIdx).innerHTML = "Contact History List Inquiry"
lngIdx = lngIdx + 1
If lngIdx = objdoc.body.all.Length Then
MsgBox "Could not find Sub Menu Item"
Exit Function
End If
Loop
objdoc.body.all(lngIdx).Click