【发布时间】: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 & 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