自动使用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源代码或是否缺少信息。

    编辑:如果它更改任何内容,这是一个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
    

    最新更新