我正在尝试下载完整的网页。换句话说,自动化这个过程:
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
当我在最后一行运行代码时,会出现一个保存文件对话框。有没有办法压制这个?
任何帮助都将非常感激。
答案 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上正确执行此操作有很多问题,所以我会在这里引用您的搜索功能来稍微调整一下代码。