如何使用 Excel VBA 登录网站并下载文件
Posted
技术标签:
【中文标题】如何使用 Excel VBA 登录网站并下载文件【英文标题】:How to login to a website and download a file using Excel VBA 【发布时间】:2013-06-27 23:40:12 【问题描述】:几天来,我一直在兜圈子,试图解决这个问题。
我正在尝试使用 VBA 和 InternetExplorer 对象登录到站点并下载文件。问题是,一旦代码单击超链接,我会从 Internet Explorer(在我的情况下为版本 10)收到提示:“您要打开还是保存“file.xls”?我现在该怎么办?
这是我尝试过的:
URLDownloadToFile。这不起作用,因为不登录就无法访问该文件。
在 Internet Explorer 中禁用打开/保存提示。也不去。此提示被设计为一种安全“功能”,旨在不被禁用。有些人提到手动输入注册表项可以解决问题,但它对我不起作用。 (也许我没有做正确的注册表项?
是否有用于禁用提示的 Internet Explorer 下载管理器插件?我还没有找到。
SendKeys ("%o") '(Alt + o)。这应该“单击”打开文件。为什么不使用它?因为不靠谱。用户有时会切换活动窗口。 (有没有办法“发送密钥”到特定窗口?)
使用 WinHttpRequest。这应该可行,但学习如何使用 WinHttpRequest 并重写我的所有代码似乎需要做很多工作。 (可能懒人有更多的工作)此外,调试 WinHttpRequest 似乎要困难得多,因为在 IE 中我可以看到正在发生的事情。
iMacros。理论上,一旦我在网站上输入字段,我就可以使用 iMacros 下载文件。 iMacros 的问题是加载和关闭需要时间。它必须用 iMacro 加载 FireFox,然后加载网站,然后关闭 Firefox。我的 VBA 程序旨在下载数百个文件。
帮助!谢谢。
【问题讨论】:
您尝试过的很棒的事情清单!如果所有 SO 的新用户都会写出这么棒的第一个问题! 【参考方案1】:解决方案是使用 cURL 而不是尝试获取 Explorer 的“帮助”。您可以在 Equivalent cURL in VBA? 找到有关如何执行此操作的详细信息。但不是将响应发送到 MsgBox,而是打开一个文件并写入它。当然,这实际上是在使用WinHTTPRequest
,并且您已经在问题中说过“这似乎是一项疯狂的工作” - 所以我不确定您是否会对解决方案感到满意。
注意 - Options
属性的使用很棘手 - 您可以在 http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx 找到有关如何使用它的详细信息。在给出的示例中,选项 SslErrorIgnoreFlags 设置为 13056 - 即0x3300
,这意味着“忽略所有错误”,因为它是
Unknown certification authority (CA) or untrusted root 0x0100
Wrong usage 0x0200
Invalid common name (CN) 0x1000
Invalid date or certificate expired 0x2000
我希望这已经足够了 - 鉴于你的问题的细节,我毫无疑问!
另一个建议(不确定这是否实用)- 使用 VBA 以外的平台。有许多带有工具箱的高级语言就是为了这个目的。我个人最喜欢的是 php 中的 cURL,但 Python 中也有一些非常好的选项。但这是否有意义取决于您尝试将其连接到什么。
【讨论】:
以上是关于如何使用 Excel VBA 登录网站并下载文件的主要内容,如果未能解决你的问题,请参考以下文章