【问题标题】:Identifying HTML button with VBA使用 VBA 识别 HTML 按钮
【发布时间】:2020-05-13 18:08:37
【问题描述】:

我正在编写一个宏来尝试自动化一项非常繁琐的每月任务,它涉及登录网站、下载 CSV 文件,然后在将其上传到数据库之前进行一些清理和重新排列。

我被困在流程的一个非常具体的部分,并尝试了多种解决方案,但无法让它发挥作用,特别是识别并单击创建下载文件的按钮,

这是我需要访问的按钮的 HTML -

<button class="btn btn-primary btn-xs" type="button" data-toggle="modal" data-target="#download_modal" data-licenceno="33872" data-dfname="Care &amp; Nursing Homes Master" data-dfid="1001">Create a new file containing all records</button>

这是我到目前为止所拥有的,它一直有效,直到下载文件子中的 for each 循环,我目前只是试图识别按钮以便我可以点击它,但它没有识别任何东西类,尽管从 HTML 中完全复制了类名,但没有错误,但也没有写入即时窗口,我似乎找不到任何访问按钮的方法,因此将不胜感激。

Option Explicit
Sub Opensite()
'open caredata URL and login
    Dim IEapp As Object, WebURL As String, HTMLdoc As HTMLDocument
        Set IEapp = CreateObject("InternetExplorer.Application")
        WebURL = "URL"
    With IEapp
        .silent = True
        .Visible = True
        .Navigate WebURL
        Do Until IEapp.readyState = 4
            DoEvents
        Loop
        Set HTMLdoc = IEapp.document
    End With
    With HTMLdoc.forms(0)
        .UserName.Value = "myusername"
        .Password.Value = "mypassword"
        .btn_signin.Click
    End With
    downloadfile IEapp, HTMLdoc
End Sub
Private Sub downloadfile(IE As Object, HTML_doc As HTMLDocument)
'download CSV file
    Dim o As Object, i As Object
    Do Until IE.readyState = 4
        DoEvents
    Loop
    Set o = IE.document.getElementsByClassName("btn btn-primary btn-xs")
    For Each i In o
        Debug.Print i.innerHTML
    Next i
End Sub

【问题讨论】:

  • 我使用 SO downvote 按钮作为我的目标按钮复制了您的功能,并且能够很好地打印内部 HTML。也许尝试导航到 Chrome 中的网站并检查元素以确保类名仍然相同和/或不会随 Javascript 或 jQuery 更改?
  • 抱歉,请您详细说明一下,我用 chrome 打开页面并检查了元素,但 HTML 是相同的。我如何知道它是否随 Javascript 或 jQuery 而变化?
  • 我在想它可能在页面加载时发生了变化,但是因为你打开它并检查并看到 HTML 是相同的,这使我的理论无效。我只是用另一个网页再次尝试,仍然能够返回innerHTML。您是否尝试过进入代码并查看 o 返回的内容?
  • @jclasley 现在完全迷路了,当逐行执行代码时,innerHTML 被打印出来,当我只运行宏时不会发生这种情况,这可能是什么原因?编辑 - 也运行 If i.innerHTML = "Create a new file containing all records" Then i.Click End If 并单步执行代码,但运行宏不起作用。
  • 我感觉问题是哪个网页处于活动状态,可能是因为 sub 的目标是登录页面,该页面没有任何具有该类名称的按钮?

标签: html vba automation


【解决方案1】:

发生的事情是 IE 挂在负载上,然后您的 o 被设置为空。当你单步执行它时,你是在给它加载时间,但是当它自动运行时,它就没有时间差的奢侈了。即使您正在等待正确的响应类型,它仍然会加载一些后端内容。

您仍然可以继续使用 IE 应用程序单击按钮并登录,但请参阅this answer,了解登录后获取 innerHTML 的最佳方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多