我有以下代码从网上下载特定文件。网页上有文件的名称,如果你点击它就会得到"你要打开还是保存.......从......?打开/保存/取消。 这就是我到目前为止所做的:
Dim ie As InternetExplorer
Dim html As HTMLDocument
Set ie = New InternetExplorer
ie.Navigate "http://customerservice.ciena.com/BidRegister/Queue.aspx?REGIONID=3"
Set fe1 = html.getElementById("ctl00_P1_rdgFileList_ctl00_ctl00_btnGetFile")
fe1.click
此时我收到了上面告诉你的弹出消息。如何继续我的代码以避免弹出并直接将文件保存在给定位置?是否有一行代码直接保存文件?
答案 0 :(得分:2)
根据我的回忆,使用Internet Explorer对象时,您无法绕过其安全提示。
我通过使用serverhttp对象使用post / get请求,将文件作为响应体,然后使用ADODB对象将身体直接保存到预定位置来解决这个问题。
以下是GET请求的示例,该请求应直接从URL下载文件:
set objhttp = new MSXML2.ServerXMLHTTP60
URL = "http://www.princexml.com/samples/catalog/PrinceCatalogue.pdf"
objhttp.Open "GET", URL, False
objhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objhttp.send
If objhttp.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write objhttp.responseBody
oStream.SaveToFile "filepath and filename.pdf", 2
oStream.Close
End If
要使这项工作适用于POST请求,您需要更多信息。要尝试查找信息,您需要使用Internet Explorer上的F12开发人员工具:
最后要做的就是在上面的代码中更改两行:
objhttp.Open "POST", URL, False
objhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objhttp.send (This is where you put the data string i.e. the REQUEST BODY)
抱歉,我不能再指定了,POST请求正文可以有多种格式,所以如果没有看到系统的示例,我就无法继续了。