【发布时间】:2018-01-26 20:37:56
【问题描述】:
所以我有一个 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 工作,我也需要自动“另存为”文件,而不仅仅是“保存”在“下载”文件夹中。
【问题讨论】:
-
您可以尝试:a) 输入选项卡以找到相应的按钮,然后通过
SendKeys输入目录名称,或 b) 使用WinHttp.WinHttpRequest发送 Web 请求并获取回复。如果您可以在登录 Chrome/IE 时检查它发送的内容,那么您也许可以这样做。 -
@BrownishMonster,我想我会学习并尝试 WinHttp.WinHttpRequest 的想法。您认为我仍然可以先登录,然后导航,然后使用该方法下载文件吗?
-
我不确定,取决于他们如何发回登录凭据。您可以尝试在 chrome/IE 中进行检查。您可能需要在 url 之后写入凭据,例如
www.example.com?user=MyUser&PWord=PW,但这取决于它们发回的参数。您可能必须在每个响应中检索 cookie 并在每个请求中设置它们。 -
@BrownishMonster 好的,我的下一个问题是,如何使用您的方法下载?请假设我没有预先确定的 URL。当我点击下载时,URL 会动态生成
-
您可以下载响应,我希望它是文件本身。至于动态网址,老实说我不知道。如果 URL 的某些部分是静态的,而动态部分是标识符,您可以尝试在其他响应之一中找到标识符。我已经完成了自动化 IE 并使用了 WinHttpRequest(或者可能是其他一些变体)并发现后者不那么不稳定。自动化方式随机给出错误。