VBA Excel下载网页完成

时间:2014-12-11 09:50:08

标签: excel vba

我正在尝试下载完整的网页。换句话说,自动化这个过程:

1-打开网页 2-单击另存为 3-选择完成 4-关闭网页。

这是我到目前为止所得到的:

URL = "google.com" 'for TEST
Dim IE
Set IE = CreateObject("Internetexplorer.Application")
IE.Visible = False
IE.Navigate URL
Do
Loop While IE.Busy = True
Dim i
Dim Filename
i = 0
Filename = "C:\Test.htm"
IE.Document.ExecCommand "SaveAs", False, Filename 

当我在最后一行运行代码时,会出现一个保存文件对话框。有没有办法压制这个?

任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

另存为对话框cannot be suppressed

  

从脚本调用此方法时,无法禁止“保存HTML文档”对话框。

它也是一个模态对话框,你不能自动点击" Save"按钮。当面对这种对话时,等待手动用户输入时VBA执行暂停。

您可以尝试阅读页面的HTML并使用标准I / O函数将其打印到文件中,而不是使用IE.Document.ExecCommand方法。

Option Explicit
Sub SaveHTML()
Dim URL as String
Dim IE as Object
Dim i as Long
Dim FileName as String
Dim FF as Integer

URL = "http://google.com" 'for TEST
Filename = "C:\Test.htm"

Set IE = CreateObject("Internetexplorer.Application")
IE.Visible = True
IE.Navigate URL
Do
Loop While IE.Busy

'Creates a file as specified
' this will overwrite an existing file if already exists
CreateObject("Scripting.FileSystemObject").CreateTextFile FileName

FF = FreeFile
Open Filename For Output As #FF

With IE.Document.Body
    Print #FF, .OuterHtml & .InnerHtml
End With

Close #FF

IE.Quit
Set IE = Nothing
End Sub

我不确定这是否能完全满足您的需求。还有其他方法可以从Web获取数据,最好的方法是从XMLHTTP request获取原始HTML并将其打印到文件中。

当然,我们实际上很少需要HTML格式的整个网页,因此如果您希望从网页中抓取特定数据,那么XMLHTTP和DOM将是最好的方法。 ,根本不需要将其保存到文件中。

或者,您可以使用Selenium包装器来自动化IE,这比使用InternetExplorer.Application类中相对较少的本机方法要强大得多。

另请注意,您正在使用一种相当粗略的方法来等待加载网页(Loop While IE.Busy)。虽然可能有时会工作,但可能并不可靠。关于如何在SO上正确执行此操作有很多问题,所以我会在这里引用您的搜索功能来稍微调整一下代码。