使用VBA自动导航网站页面之间的导航

时间:2016-12-06 19:21:41

标签: html dom web access-vba

我登陆的网页左侧有一个菜单,看起来像这样

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源代码或者是否缺少一些信息。

    编辑:它是一个内部网站点,如果它改变了什么

  • 2 个答案:

    答案 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