首页 > 解决方案 > 如何使用 VBA 单击 HTML 内文

问题描述

如何通过VBA单击“li”的内部文本?rhef 是动态的。我有 3 页,当加载表单时,默认情况下页面为 1,我必须单击第 2 页。我已经粘贴了下面的代码,当我一步一步看到时,行正在循环,并传递“difHTMLA.Click”行,但它既没有抛出错误也没有重新加载页面。请帮忙

Set difHTMLAs = doc.getElementsByTagName("li")
    For Each difHTMLA In difHTMLAs
        If difHTMLA.getAttribute("classname") = "swfPagingOtherPageArea swf-left" Then
            If CStr(Trim(difHTMLA.innerText)) = "2" Then
            difHTMLA.Click
            End If
        End If
      Next difHTMLA
    Exit For

<ul class="swfPaging">    
        <li> 
          &lt;
        </li>  
            <li class="swfPagingSelectedPageArea swf-left">
              1
            </li>
            <li class="swfPagingOtherPageArea swf-left">       
              <a href="/wps/myportal/dynamic URL/">
                2
              </a>
            </li>    
            <li class="swfPagingOtherPageArea swf-left">
              <a href="/wps/myportal/dynamic URL/">
                3
              </a>
            </li>

标签: htmlvbaweb-scrapingautomation

解决方案


您可以使用 css:nth-of-type伪选择器来定位 parent 的类li。Css 选择器通过 querySelector 应用以返回第一个匹配项,或者通过 querySelectorAll 应用以返回所有匹配项。然后,您需要with 类中的子a标签。前面,下面,是一个 CSS 类选择器。它根据类属性名称选择元素。这是基于提供的 html。liswfPagingOtherPageArea.

ie.document.querySelector(".swfPagingOtherPageArea:nth-of-type(3) a")

第2页

或者

ie.document.querySelector(".swfPagingOtherPageArea:nth-of-type(4) a")

第 3 页

那是从起始页开始的。

在没有看到页面的情况下,更难就循环页面提出建议,因为元素可能会发生变化。例如,您可能会发现,当您在第二页上时,您无法使用.swfPagingOtherPageArea:nth-of-type(4) a获取第 3 页,因为第 3 页现在是.swfPagingOtherPageArea:nth-of-type(3) aie 活动页面的类名称发生了变化,因此使用的正确索引也发生了变化。


如果仍然没有触发,那么您可能需要在元素上触发 FireEvent“onclick”

ie.document.querySelector(".swfPagingOtherPageArea:nth-of-type(3) a").FireEvent "onclick"

如果仍然失败,您可以尝试将事件添加到节点,如此处所示


推荐阅读