VBA / IE如何通过文件保存提示?

时间:2017-09-19 17:53:17

标签: vba internet-explorer outlook-vba

我们会收到包含文档链接的电子邮件,或者更准确地说,是指包含我们点击下载文档按钮的网页的链接。我想在Office 2016,IE 11和Windows 7 Enterprise下自动执行此操作。我已经走到了这一步。

screen shot with download button and IE prompt

在VBA中,我设置了对Microsoft HTML对象和Internet控件库的引用。我加载页面,找到页面上的按钮控件,然后发出按钮的点击方法。然后我得到你上面提到的提示。我想保存为...也就是说,每个下载的文件都将保存在特定目录中。你会怎么做?

编辑:文件的网址未包含在网页的源代码中。 “下载”按钮的代码如下:

<form action="/Home/NoCaptcha" method="post">
    <input type="submit" class="btn btn-primary btn-lg" value="Download" style="margin-top: 40px;" />
</form>

提示不是网页的一部分,因此我无法使用HTML查找按钮。我可以使用SendKeys(不理想),但即使这样,我也只能发送Alt-S来保存。有没有办法虚拟点击向下箭头以显示“另存为”选项?但是如果我这样做,我该如何输入文件的位置?我是否必须以某种方式控制实际的“另存为”对话框?

假设我可以使用SendKeys发送Alt-S,就在这之前,我可以更改保存默认下载位置的注册表项。但这将涉及每天数百次写入注册表。对此有后果吗?我是否有冒险破坏注册表的风险?

编辑:我想如果IE自动下载文件,那也可以解决我的问题进一步研究发现,自IE 10以来,没有提示的下载选项被删除。

1 个答案:

答案 0 :(得分:1)

由于您拥有该页面的URL,而您拥有获取该文件所需的所有内容,因此该部分帖子的版本参数似乎不包含在原始URL中。因此,简而言之,解析下载按钮URL以获取DocumentLocator ID和PublicKey。您还可以解析包含所有信息的HTML,DocLocID,Version和Key。

这是https://eservices.truecertify.com/?loc=1DC-IAJJJ4-AE58564C&key=Asbg

中表单的html源代码

这是您获取数据以汇总最终URL字符串

的地方

https://eservices.truecertify.com/Home/NoCaptcha?BypassCaptcha=True&DocumentLocator=1DC-IAJJJ4-AE58564C&PublicKey=Asbg&VersionNumber=Version+3.0.0.3

<form action="/Home/NoCaptcha" method="post">
    <input type="submit" class="btn btn-primary btn-lg" value="Download" style="margin-top: 40px;">
    <input data-val="true" data-val-required="The BypassCaptcha field is required." id="BypassCaptcha" name="BypassCaptcha" type="hidden" value="True">
    <input data-val="true" data-val-required="The DocumentLocator field is required." id="DocumentLocator" name="DocumentLocator" type="hidden" value="1DC-IAJJJ4-AE58564C">
    <input data-val="true" data-val-required="The PublicKey field is required." id="PublicKey" name="PublicKey" type="hidden" value="Asbg">
    <input id="VersionNumber" name="VersionNumber" type="hidden" value="Version 3.0.0.3">
</form>

Sub TestMe()
'URL of download button
'https://eservices.truecertify.com/?loc=1DC-IAJJJ4-AE58564C&key=Asbg
'within the loc is the document locator ID, the key is the public key, and you will need to check to see if the version changes
'the Posted URL
'BypassCaptcha=True&DocumentLocator=1DC-IAJJJ4-AE58564C&PublicKey=Asbg&VersionNumber=Version+3.0.0.3
Dim sURL As String
sURL = "https://eservices.truecertify.com/Home/NoCaptcha?BypassCaptcha=True&DocumentLocator=1DC-IAJJJ4-AE58564C&PublicKey=Asbg&VersionNumber=Version+3.0.0.3"

SavePDFFile sURL
End Sub

Sub SavePDFFile(myURL As String)
Dim savePath As String
Dim WinHttpReq As Object
savePath = "C:\"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
'I used get instead of post
WinHttpReq.Open "GET", myURL, False
WinHttpReq.send

    If WinHttpReq.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Open
        oStream.Type = 1
        oStream.Write WinHttpReq.responseBody
        oStream.SaveToFile (savePath & "MyFile.pdf")
        oStream.Close
    End If

End Sub