保存网页文件而不显示对话框怎么实现?

发布时间:2019-08-25编辑:脚本学堂
本文介绍了保存当前网页的方法,在保存网页时不显示对话框的实现方法,有需要的朋友参考下。

使用 IE 或 WebBrowse 对象来保存当前网页到本地文件:
 

复制代码 代码示例:
m.cSrc = 'http://www.163.com'
m.cTag = 'c:163.htm'
 
m.oe = CreateObject( 'InternetExplorer.Application' )
m.oe.Navigate( m.cSrc )
m.oe.Visible = .T.
WAIT WINDOW TIMEOUT 2
m.oe.ExecWB( 4, 1, m.cTag )
 

问题:执行 ExecWB 时会弹出一个用户确认对话框,MSDN  指出第二个参数可用的取值为:
 

复制代码 代码示例:
typedef enum 
{
    OLECMDEXECOPT_DODEFAULT  = 0,
    OLECMDEXECOPT_PROMPTUSER = 1,
    OLECMDEXECOPT_DONTPROMPTUSER   = 2,
    OLECMDEXECOPT_SHOWHELP              = 3
} OLECMDEXECOPT;
 

无论如何取值都无法取消这个对话框,按照 ms 的解释(http://support.microsoft.com/kb/244757/en-us),这个对话框是无法取消的,只能用 URLDownloadToFile 看来替代。但是,URLDownloadToFile API 只能将网页保存为 html 格式的文件,而无法用 MHTML Document 格式来保存。

这里分享另一种使用 CDO.Message 对象来保存为 mht 格式的方法:
 

复制代码 代码示例:

#define aveCreateNotExist     1
#define adSaveCreateOverWrite 2

m.cSrc = 'http://www.microsoft.com'
m.cFile = 'c:'

m.cdo = CreateObject( 'CDO.Message' )
m.cdo.CreateMHTMLBody( m.cSrc, 0, '', '' )   && 0 - CdoMHTMLFlags
m.ado = m.cdo.GetStream()
m.cTitle = m.ado.ReadText()
m.cTitle = STREXTRACT( m.cTitle, '<title>', '</title>', 1, 3 )
m.ado.SaveToFile( m.cFile + m.cTitle + '.mht', adSaveCreateOverWrite )

STORE NULL TO m.ado, m.cdo
 

以上是关键代码,要正确处理所有情况,可能需要先清除网页缓存,判断 title 是否合法,设置保存的字符集等。