【问题标题】:automating the navigation between pages of a website with VBA使用 VBA 在网站页面之间自动导航
【发布时间】:2017-04-21 13:17:36
【问题描述】:

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

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 站点

  • 【问题讨论】:

    • 您应该尝试添加网站的示例。如果您的网站在 Intranet 上,您可以为我们创建一个基本的测试示例。
    • @TomasZubiri 你的意思是像网站的截图吗?
    • 或者网站的html代码

    标签: html ms-access web dom vba


    【解决方案1】:

    我解决了我的问题。基本上,我需要单击的元素没有被 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
    

    【讨论】:

      【解决方案2】:

      您可以使用 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
      

      【讨论】:

      • 感谢您的回答,但我认为这不是一个可行的选择。我正在构建的内容将推广给其他用户,我认为他们也需要下载 Selenium
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多