【发布时间】:2020-10-13 20:13:02
【问题描述】:
如何操作下面的 Internet Explorer 下载弹出窗口。
我尝试了下面的代码,但这不是框架通知栏,所以没有帮助。
Sub PressSave(ie As InternetExplorer)
Dim o As IUIAutomation
Dim e As IUIAutomationElement
Application.Wait (Now + TimeSerial(0, 0, 4))
Set o = New CUIAutomation
Dim h As Long
h = ie.hwnd
'find notification bar
h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
If h = 0 Then Exit Sub
'find save button
Set e = o.ElementFromHandle(ByVal h)
Dim iCnd As IUIAutomationCondition
Dim Button As IUIAutomationElement
Do Until Not Button Is Nothing
Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Save")
Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
Loop
'click save
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke
'wait till file is completely downloaded
Dim iOpen As IUIAutomationCondition
Dim OpenButton As IUIAutomationElement
Do Until Not OpenButton Is Nothing
Set iOpen = o.CreatePropertyCondition(UIA_NamePropertyId, "View
downloads")
Set OpenButton = e.FindFirst(TreeScope_Subtree, iOpen)
Loop
End Sub
我尝试使用 API 来获取数据,但一直收到错误 401,这意味着它需要身份验证,我不确定是否可以添加参数来提供它。
Sub APIToGetData()
Dim sURL As String
Dim savePath As String
Dim WinHttpReq As Object
savePath = "C:\Downloads"
sURL = "https://[myurlhere]/api/admin/data_dumps/download"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", sURL, False
WinHttpReq.send
If WinHttpReq.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
oStream.Close
End If
End Sub
如何在不使用 SendKeys 的情况下操作此弹出窗口?
【问题讨论】:
-
您能否通过使用 API 下载文件来解决此问题?
-
更新了我的问题。不确定它是否有区别,但它是一组文件
-
如果您要走 API 路线,您需要查看文档。通常,您首先发出一个 Web 请求,该请求通过 API 进行身份验证,基本上您会返回一个字符串,该字符串将您标识为授权用户。通常你有用户名/密码或 API 密钥之类的东西。一旦通过身份验证,您将身份验证信息(通常在标头中)传递到对服务的后续调用中。
-
已检查,但我认为我无法使用 API。每次都会生成一个新密钥。
-
根据实施情况,这可能是预期的。你能分享你正在审查的 API 吗?