我登陆的网页左侧有一个菜单,看起来像这样
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源代码或者是否缺少一些信息。
编辑:它是一个内部网站点,如果它改变了什么答案 0 :(得分:0)
您可以使用Selenium for VBA(https://github.com/florentbr/SeleniumBasic)
解决此问题在计算机中安装Selenium并将其包含在Excel的参考资料中。
导航这样一个网站的代码是:
Dim Browser As New Selenium.IEDriver
Browser.get "http://SOMESITE.COM"
browser.wait 5000
browser.findElementById("menuLevel10").click
答案 1 :(得分:0)
我解决了我的问题。基本上,我需要点击的元素没有被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