所以我有一个VBA代码,目前已成功登录网站并进一步导航到网站的其他页面并抓取我需要的数据。
我现在需要导航到一个页面(没问题),用查询填充文本框(没问题)并点击“下载”按钮(没问题)。然后,这会提示弹出窗口下载文件(打开/保存/取消)。我的要求是在没有用户交互的情况下保存此文件 - 宏应该将文件保存在预定的目录中。
关于如何实现这一目标的任何想法?我根本无法让SendKeys工作。
Set appIE = New InternetExplorerMedium
sURL2 = "http://somewebsite.com/query.asp?"
With appIE
.Navigate sURL2
.Visible = True
End With
Do While appIE.Busy Or appIE.ReadyState <> 4
DoEvents
Loop
'code to enter the query in textbox and click on download file button
appIE.Document.getElementsByTagName("textarea")(0).Value = Sheets("UserEntry").Range("L37")
appIE.Document.getElementsByName("btnSubmit")(203).Click
Application.SendKeys "%{s}"
Set appIE = Nothing
编辑:即使我可以让SendKeys工作,我也需要自动“另存为”文件,而不只是将其“保存”在“下载”文件夹中。
答案 0 :(得分:1)
好的,由于@BrownishMonster建议的方法
,让它工作了我使用了WinHTTP.WinHTTPRequest.5.1
我还使用Fiddler调查浏览器在POST请求中发送的内容,然后让VBA执行相同的操作
Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")
'This is to POST the login info and login to the site
WHTTP.Open "POST", mainUrl, False
WHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.send loginString
'This is to POST the download info and download the file
WHTTP.Open "POST", fileUrl_XLSResult, False
WHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WHTTP.send downloadString
FileData = WHTTP.responseBody
'This is to save the file in the location MyFilePath
If WHTTP.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WHTTP.responseBody
oStream.SaveToFile MyFilePath, 1
oStream.Close
End If