【问题标题】:Access Class inside a Class类中的访问类
【发布时间】:2018-01-24 07:43:31
【问题描述】:

我正在尝试创建一个简单的 Excel VBA 网络抓取宏。有一次,我需要宏来单击一个按钮(在封闭的图像下方 - button class="edit"),该按钮位于特定的class="title">TitleName 内。在网页上,TitleName 不止一个,我总是需要转到特定的TitleName 并单击TitleName 特定的编辑按钮。

有人可以帮忙处理宏吗? HTML 代码如下图所示:

【问题讨论】:

  • 请edit您的原始问题并添加您已有的VBA代码。您还可以阅读How to Ask 和Why is “Can someone help me?” not an actual question?,然后告诉您代码中出了什么问题以及您在哪里出错或卡住了。也不要将代码发布为图像,而是添加格式化为代码块的代码。其他用户无法对代码图像执行任何操作。此外,我们可能需要查看至少包含 2 个不同 TitleNames 的代码示例。

标签: vba excel web web-scraping


【解决方案1】:

这应该适合你。

获取button 的tagName 集合,然后遍历它们,直到找到className 为edit 的集合。

代码:

Sub pressBtn()

    'your html declarations & navigation

    'Grab the content class that contains your titlename
    Dim contentClassColl As Object, contentClass As Object
    Set contentClassColl = ie.document.getElementsByClassName("content")

    Dim TitleName As String, pColl As Object, p As Object, exitFlag As Boolean
    TitleName = "YourTitleNameHere"

    'Grab the correct class by looking at each tagname within the class for your title
    For Each contentClass In contentClassColl
        On Error Resume Next 'in case there are no tag name 'P' in class
        Set pColl = contentClass.getElementsByTagName("p")
        For Each p In pColl
            If p.innerHTML Like "*" & TitleName & "*" Then
                exitFlag = True
                Exit For
            End If
        Next p
        On Error GoTo 0
        If exitFlag = True Then Exit For
    Next contentClass

    Dim btnColl As IHTMLElementCollection, btn As IHTMLElement
    Set btnColl = contentClass.getElementsByTagName("button")
    For Each btn In btnColl
        If btn.className = "edit" Then
            Exit For
        End If
    Next btn
    btn.Click

End Sub

【讨论】:

  • 我认为这根本无法回答问题:您如何在这里通过class="title">TitleName 选择特定的编辑按钮?这只是一个示例,说明如何遍历按钮并找到编辑按钮(这只是原始任务的一小部分)。还有很多编辑按钮,这段代码总是抓住第一个。
  • 是的,完全正确。感谢 K.Davis 提供上面的代码,但它只选择了第一个编辑按钮。如果您认为有很多标题,我需要一个 TitleName 特定的编辑按钮。
  • 我去看看
  • @Shiwers 如果不看到包含至少 2 个不同 class="title">TitleName 的 连续 HTML 代码,几乎不可能回答这个问题。请将此添加到您的原始问题作为代码而不是图像。还要添加你已经厌倦的 VBA 代码。
  • @Shiwers 更新了它。也许还有另一个类名content 不包含标签p。还将其更改为 getElements... 而不是使用该属性(我尝试将属性设置为对象 - 这是不允许的)。
猜你喜欢
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2019-08-24
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2013-05-25
相关资源
最近更新 更多