How to save a web page as HTML or MHT

How to save a web page as HTML or MHT
Here's how to save a web page displayed inside a WebBrowser (TWebBrowser component) as a raw HTML file or into a single (MHT) file (MHTML format: web archive - single file).
 
 
 

When working with Delphi, the TWebBrowser component allows you to create a customized Web browsing application or to add Internet, file and network browsing, document viewing, and data downloading capabilities to your applications.

File ... Save As; or how to save a web page from TWebBrowser
When using Internet Explorer, you are allowed you to view the source HTML code of a page and to save that page as a file on your local drive. If you are viewing a page that you wish to keep, go to the File/Save As ... menu item. In the dialog box that opens, you have several file types offered. Saving the page as a different filetype will affect how the page is saved...

SaveAs in IE

The TWebBrowser component (located on the "Internet" page of the Component Palette) provides access to the Web browser functionality from your Delphi applications. In general, you'll want to enable saving of a web page displayed inside a WebBrowser as a HTML file to a disk.

Saving a web page as a raw HTML
If you only want to save a web page as a raw HTML you would select "Web Page, HTML only (*.htm, *.html)". It will simply save the current page's source HTML to your drive intact. This action will NOT save the graphics from the page or any other files used within the page, which means that if you loaded the file back from the local disk, you would see broken image links.

Here's how to save a web page as raw HTML using Delphi code:

uses ActiveX;
...
procedure WB_SaveAs_HTML
(WB:TWebBrowser; const FileName : string);
var
  PersistStream: IPersistStreamInit;
  Stream: IStream;
  FileStream: TFileStream;
begin
  if not Assigned(WB.Document) then
  begin
    ShowMessage('Document not loaded!');
    Exit;
  end;

  PersistStream := WB.Document as IPersistStreamInit;
  FileStream := TFileStream.Create(FileName, fmCreate);
  try
    Stream := TStreamAdapter.Create(FileStream, soReference)
              as IStream;
    if Failed(PersistStream.Save(Stream, True)) then
      ShowMessage('SaveAs HTML fail!');
  finally
    FileStream.Free;
  end;
end; (* WB_SaveAs_HTML *)

 

Usage sample:

  //first navigate
  WebBrowser1.Navigate('http://delphi.about.com');
  
  //then save
  WB_SaveAs_HTML(WebBrowser1,'c:/WebBrowser1.html');

 

Note 1: the IPersistStreamInit and IStream interfaces are declared inside the ActiveX unit.
Note 2: the web page is saved as a raw html to the WebBrowser1.html file on the root folder of the C drive.

MHT : Web archive - single file
When you save a Web page as "Web archive, single file (*.mht)" the web document gets saved in the Multipurpose Internet Mail Extension HTML (MHTML) format with a .mht file extension. All relative links in the Web page are remapped and the embedded content is included in the .mht file, rather than being saved in a separate folder (as the case is with "Web Page, complete (*.htm, *.html)").

MHTML enables you to send and receive Web pages and other HTML documents using e-mail programs such as Microsoft Outlook, and Microsoft Outlook Express; or even your custom Delphi email sending solutions. MHTML enables you to embed images directly into the body of your e-mail messages rather than attaching them to the message.

Here's how to save a web page as a single file (mht format) using Delphi code:

uses CDO_TLB, ADODB_TLB;
...
procedure WB_SaveAs_MHT(WB: TWebBrowser; FileName: TFileName);
var
  Msg: IMessage;
  Conf: IConfiguration;
  Stream: _Stream;
  URL : widestring;
begin
  if not Assigned(WB.Document) then Exit;
  URL := WB.LocationURL;

  Msg := CoMessage.Create;
  Conf := CoConfiguration.Create;
  try
    Msg.Configuration := Conf;
    Msg.CreateMHTMLBody(URL, cdoSuppressAll, '', '');
    Stream := Msg.GetStream;
    Stream.SaveToFile(FileName, adSaveCreateOverWrite);
  finally
    Msg := nil;
    Conf := nil;
    Stream := nil;
  end;
end; (* WB_SaveAs_MHT *)

 

Sample usage:

  //first navigate
  WebBrowser1.Navigate('http://delphi.about.com');
  
  //then save
  WB_SaveAs_MHT(WebBrowser1,'c:/WebBrowser1.mht');

 

Note 1: The _Stream class is defined in ADODB_TLB unit that you probably already have created. The IMessage and IConfiguration interfaces code from cdosys.dll library. CDO stands for Collaboration Data Objects - object libraries designed to enable SMTP Messaging.
The CDO_TLB is an auto generated unit by Delphi. To create it, from the main menu select "Import Type Library", select "C:/WINDOWS/system32/cdosys.dll" then click the "Create unit" button.

 

Saving a web document using TWebBrowser

Note that you could rewrite the WB_SaveAs_MHT procedure to accept an URL string (not TWebBrowser) to be able to save a web page directly - no need to use the WebBrowser component. The URL from WebBrowser is retrieved using the WB.LocationURL property.

保存web页面。自动将选项卡的html文件保存在选定的目录中。也刷新了页面安排… 保存网页。 自动将选项卡的html文件保存在预定计时器上的所选目录中。 同时刷新计划的计时器上的页面。 请注意,此功能仅在适用于Windows 8和10的Chrome上进行了测试。我有报告说,它不适用于Linux的Chrome,也可能不适用于Apple的Chrome。 因此,请仅在Windows 8或10上使用。我没有对此应用程序进行任何更新,但我仍然亲自使用它,它对我来说非常有用,如下所述。 用作简单的屏幕抓取工具,将网页的html保存到文件中。 然后,您可以使用另一个程序解析html文件并提取内容。 如果页面使用新内容自动刷新,则内容将保持更新,或者您可以在计时器上自动刷新页面。 1)选择要自动保存的选项卡,打开自动保存扩展名,单击+,它将显示所选的选项卡。 2)从Google下载目录中选择一个子目录(只能使用Chrome扩展程序将下载目录和子目录保存到其中)。 保留空白以保存到下载。 您还可以将Chrome配置为指向计算机/网络上的任何目录作为默认的“下载”目录(“设置”,“高级”)。 然后,自动保存将保存到该目录或在自动保存中配置的任何子目录。 3)输入文件名。 即使格式相同,.txt扩展名的保存速度似乎也比.html快。 每次都覆盖相同的文件。 目的是在不创建大量文件的情况下获取最新的网页内容。 4)选择自动保存间隔(以秒为单位)。 5)选择以分钟为单位的自动刷新网页时间。 空白或“从不”将永远不会刷新页面。 该扩展程序会清除Chrome的“下载”信息,仅用于自动保存文件,以防止文件过大并成为内存问题。 权限:1)阅读并更改您访问的网站上的所有数据-必须能够保存网页上的内容-该扩展程序必须首先获取该页面。 我们可以将其限制为单个页面,即您要保存的页面。 但是,这样对其他任何页面都无效。 2)管理您的下载-创建页面的html作为链接,并将该链接发送到Chrome以进行下载和保存。 必须管理下载才能做到这一点。 支持语言:English (United States)
将一个完整的web页面(或者只是它当前的状态)保存为一个HTML文件。 更改版本16.1•“保存的页面信息”面板中的新“保存自”字段 •仅当使用资源加载器查看保存的页面时,菜单上才会显示“删除资源加载器” •改进了页面信息栏的外观 •重新保存保存的页面时,改进了保存文件中HTML的格式 •其他小的改进 • 修正了一些小错误。概述保存页面WE提供了一种简单的功能,可以将网页(如当前显示的)保存为单个HTML文件,该文件可以在任何浏览器中打开。保存的页面是原始页面的高度准确表示 Save Page WE是使用新的WebExtensions API实现的,可用于具有相同功能和用户界面的Firefox和Chrome。选项页面可以按以下方式访问“保存页面的WE选项”页面:•Firefox-在菜单栏上,选择“工具”>“附加组件”(或按Ctrl + Shift + A),选择“扩展”选项卡,然后单击“选项”按钮 •Chrome-右键单击工具栏按钮,然后选择选项。工具栏按钮安装“保存页面WE”后,主工具栏上将出现一个新的蓝色“软盘”按钮。要将网页另存为HTML文件,只需单击“保存页面WE”工具栏按钮。有一个选项可将按钮操作设置为:•保存基本项目•保存标准项目•保存自定义项目有一个选项可提示用户在保存文件时输入注释。有一些选项可以指定保存的文件名的格式。请参阅下面的“保存的文件名”部分。为了提示输入保存位置,必须将Chrome的“下载”选项设置为“在下载前先询问每个文件的保存位置”。默认情况下,保存HTML文件的扩展名为'.html'。上下文菜单和按钮菜单要将网页另存为HTML文件,或对先前保存的页面执行操作,请右键单击页面内容以打开上下文菜单,选择“保存页面WE”子菜单,然后然后选择菜单项之一:•保存基本项目•保存标准项目•保存自定义项目•查看保存的页面信息•删除页面加载程序•提取图像/音频/视频或者,右键单击“保存页面WE”工具栏按钮以打开按钮菜单,然后选择菜单项之一。在上下文菜单上有一个显示/隐藏“保存页面WE”子菜单项的选项。注意,在查看保存的页面时,“提取图像/音频/视频”菜单项始终显示在上下文菜单中。键盘快捷方式要将网页另存为HTML文件,请按Alt + A。保存的文件名有一个选项可以指定保存的文件名的格式。保存整个页面和提取资源(图像/音频/视频)时使用此格式。保存的文件名可能包含以下预定义字段:•%TITLE%-(保存页面)文档标题,如果为空,则与%FILE%相同•%TITLE%-(提取资源)与%FILE相同%•%DATE(x)%-YYYYxMMxDD格式的当前日期,其中“ x”是任何字符或可以省略 •%TIME(x)%-HHxMMxSS格式的当前时间,其中'x'是任何字符或可以省略 •%HOST%-页面或资源URL中的主机名•%PATH%-页面或资源URL中的路径,不带最终文件扩展名•%FILE%-路径最后一段中的文件(不带最终文件)扩展名有一些选项可以用用户定义的字符替换保存的文件名中的空格,并设置保存的文件名的最大长度。保存的项目保存基本项目-保存以下项目:•HTML元素•HTML图像文件(当前显示)•CSS样式表•CSS图像文件(当前显示)•CSS字体文件(此浏览器使用)保存标准项目-保存基本项目项目和这些项目:•HTML图像文件(全部)•HTML音频和视频文件•HTML对象和嵌入文件•CSS字体文件(任何浏览器均不可用)保存自定义项目-保存基本项目和从此列表中选择的项目: •HTML图像文件(所有)•HTML音频和视频文件•HTML对象和嵌入文件•CSS图像文件(所有)•CSS字体文件(对于任何浏览器均不可用)•CSS字体文件(所有)•脚本(同源)注意,跨域框架中的脚本永远不会保存。保存页面时,有一个选项可以保留跨原点的框架。请注意,跨域iframe通常包含广告或访问者评论。有一个选项可以合并重复CSS图像(以减小保存的文件大小)。有一个选项可在已保存页面的顶部包括一个信息栏。有一个选项可以在已保存的文件中包括指标和资源摘要。有一个选项可以设置保存的嵌套帧/ iframe的最大深度。有一个选项可以清除已被页面本身,页面编辑器(例如Print Edit WE)或内容阻止程序(例如uBlock Origin)隐藏的元素。配置CHROME转到Chrome菜单按钮>设置>高级。在“下载”部分中,设置下载文件夹位置,然后启用或禁用“在下载前询问在哪里保存每个文件”选项。保存页面后,下载项将出现在浏览器窗口底部的下载栏中。单击下载项目中的箭头,然后启用或禁用“始终打开此类型的文件”选项。加载资源有一个选项可以设置大型或重复引用的资源所允许的最大大小。有一个选项可以设置允许加载单个资源的最长时间。有一个选项可以强制
从多个网页的完整或选定内容创建Microsoft Word文档。 此扩展程序将完整的网页或网页的选定部分转换为Microsoft Word文档(docx)。您还可以选择将来自多个网页的内容或仅将其中的选定部分转换为单个Word文档。转换后的文档可以下载到本地磁盘。该扩展读取当前页面或所选部分HTML结构,并将其转换为相应的docx结构。限制:-1.安装/更新-安装或更新后,此扩展名不适用于在安装/更新之前打开的标签页,除非重新加载了这些标签页或重新启动了chrome 2.我可以转换什么? -此扩展程序可以将除以下页面之外的任何网页转换为Microsoft Word文档-所有Chrome网上应用店页面(包括此页面) Urls以chrome://开头 chrome:// extensions以chrome-extension://开头的URL。3.某些转换后的页面看起来不一样-所有内容都被转换为Word文档,其中大部分格式保持不变。布局可能会有所不同 4.为什么某些网页保存的文件显示方形框? -对于非英语的网页,尤其会发生这种情况。目前,应用程序不支持所有语言所需的字体转换 5.为什么本地HTML文件不起作用? -出于安全原因,Chrome浏览器不允许扩展名访问File Urls,除非得到用户的明确许可。如果您希望扩展程序适用于本地HTML文件,那么您要做的就是-1.访问扩展程序管理页面(chrome:// extensions) 2.转到“将网页另存为Word文档”扩展名 3.选中“允许访问文件URL”复选框 4.重新加载本地HTML文件。 支持语言:English
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值