许多工具都可以导出.MHT文件。我想要一种将单个文件转换为文件集合,HTML文件,相关图像和CSS文件的方式,然后我可以将其上传到网络主机,并且可以被所有浏览器使用。有没有人知道任何工具或库或算法来做到这一点。如何以编程方式(或使用工具)将.MHT mhtml文件转换为常规的HTML和CSS文件?
回答
那么,你可以在IE中打开.MHT文件,并将其另存为一个网页。我测试了这个页面,尽管它在IE浏览器中看起来很奇怪(毕竟是IE),但它保存并在Chrome中正常打开(因为它看起来应该是这样)。
禁止该方法,查看文件本身,将文本块保存原样,并将所有其他内容保存在Base64中。各内容项前面有:
[Boundary]
Content-Type: [Mime Type]
Content-Transfer-Encoding: [Encoding Type]
Content-Location: [Full path of content]
凡[Mime类型],[编码类型],和[内容完整路径]是可变的。 [编码类型]似乎是base64或引用可打印。 [边界]在.mht文件的开头定义,像这样:
From: <Saved by WebKit>
Subject: converter - How can you programmatically (or with a tool) convert .MHT mhtml files to regular HTML and CSS files? - Stack Overflow
Date: Fri, 9 May 2013 13:53:36 -0400
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----=_NextPart_000_0C08_58653ABB.B67612B7"
使用,如果需要的话,你可以把自己的文件分析器。
所以IE会创建一个文件夹并分别保存图像等?我不知道你是否可以自动化IE来做到这一点与COM对象? – klumsy 2013-05-09 22:06:38
是的,IE创建一个文件夹与所有的图像和whatnot。 COM对象显示了一个'Navigate2'函数和事件处理程序(用于完成等),但是我在其引用中找不到保存函数。这并不意味着它不在那里,只是我无法找到它。 – XGundam05 2013-05-10 13:06:21
我玩这个更多,我可以加载它,并保存hack自动键盘的另存为对话框,这是hacky和脆弱的。然而它希望将它保存为MHT而不是完整的HTML(作为一个完整的网站在线保存网站工作正常),并且我找不到使用ExecWB作为选项进行保存的具体方法,因此最好的做法可能是只是用代码来处理MHT,或者尝试用其他的自动化方式来处理硒,或者使用forefox或chrome自动化或扩展等。 – klumsy 2013-05-15 06:17:18
我认为@ XGundam05是正确的。这是我做的工作。
我从Visual Studio中的Windows Form项目开始。将WebBrowser添加到表单中,然后添加两个按钮。然后,将此代码:
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.ShowSaveAsDialog();
}
private void button2_Click(object sender, EventArgs e)
{
webBrowser1.Url = new Uri("localfile.mht");
}
您应该能够借此代码并添加文件的列表,并处理每一个有foreach
。 webBrowser
包含一种称为ShowSaveAsDialog()
的方法;这将允许一个保存为.mht或只是html或整个页面。
编辑:你可以使用webBrowser的文档,并在这一点上刮信息。通过添加一个RichTextBox和公共变量按照MS的位置:http://msdn.microsoft.com/en-us/library/ms171713.aspx
public string Code
{
get
{
if (richTextBox1.Text != null)
{
return (richTextBox1.Text);
}
else
{
return ("");
}
}
set
{
richTextBox1.Text = value;
}
}
private void button2_Click(object sender, EventArgs e)
{
webBrowser1.Url = new Uri("localfile.mht");
HtmlElement elem;
if (webBrowser1.Document != null)
{
HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("HTML");
if (elems.Count == 1)
{
elem = elems[0];
Code = elem.OuterHtml;
foreach (HtmlElement elem1 in elems)
{
//look for pictures to save
}
}
}
}
每个你的家伙解决方案和这个http://stackoverflow.com/questions/872750/savinga-a-它看起来似乎是不可能的,如果没有弹出saveas对话框,这似乎是不可能的。我希望能够自动化这个enmasse – klumsy 2013-05-14 22:17:33
随着编辑,你可能会想出一个过程来刮和保存的HTML和图像。 – CaptainBli 2013-05-14 23:35:38
所以自动化IE是困难的,而不是使用端到端的,所以我认为建立某种形式的代码,它会走的路。在github上,我发现这条巨蟒其中一个可能是好的
https://github.com/Modified/MHTifier http://decodecode.net/elitist/2013/01/mhtifier/
如果我有时间,我会努力做好在PowerShell中类似的事情。
除了IE和MS Word,还有这个所谓的 'mht2html' 在SourceForge.net上开源的跨平台的程序:
http://sourceforge.net/projects/mht2htm/。
我还没有测试过,但它似乎已收到良好的评论。
P.S.对不起,提供了这样一个老问题的答案。
MHT文件本质上是MIME。因此,可以使用Chilkat.Mime或完全免费的System.Net.Mime组件来访问其内部结构。例如,如果MHT包含图像,则可以用输出HTML中的base64字符串替换它们。
Imports HtmlAgilityPack
Imports Fizzler.Systems.HtmlAgilityPack
Imports Chilkat
Public Function ConvertMhtToHtml(ByVal mhtFile As String) As String
Dim chilkatWholeMime As New Chilkat.Mime
'Load mime'
chilkatWholeMime.LoadMimeFile(mhtFile)
'Get html string, which is 1-st part of mime'
Dim html As String = chilkatWholeMime.GetPart(0).GetBodyDecoded
'Create collection for storing url of images and theirs base64 representations'
Dim allImages As New Specialized.NameValueCollection
'Iterate through mime parts'
For i = 1 To chilkatWholeMime.NumParts - 1
Dim m As Chilkat.Mime = chilkatWholeMime.GetPart(i)
'See if it is image'
If m.IsImage AndAlso m.Encoding = "base64" Then
allImages.Add(m.GetHeaderField("Content-Location"), "data:" + m.ContentType + ";base64," + m.GetBodyEncoded)
End If : m.Dispose()
Next : chilkatWholeMime.Dispose()
'Now it is time to replace the source attribute of all images in HTML with dataURI'
Dim htmlDoc As New HtmlDocument : htmlDoc.LoadHtml(html) : Dim docNode As HtmlNode = htmlDoc.DocumentNode
For i = 0 To allImages.Count - 1
'Select all images, whose src attribute is equal to saved URL'
Dim keyURL As String = allImages.GetKey(i) 'Saved url from MHT'
Dim elementsWithPics() As HtmlNode = docNode.QuerySelectorAll("img[src='" + keyURL + "']").ToArray
Dim imgsrc As String = allImages.GetValues(i)(0) 'dataURI as base64 string'
For j = 0 To elementsWithPics.Length - 1
elementsWithPics(j).SetAttributeValue("src", imgsrc)
Next
'Select all elements, whose style attribute contains saved URL'
elementsWithPics = docNode.QuerySelectorAll("[style~='" + keyURL + "']").ToArray
For j = 0 To elementsWithPics.Length - 1
'Get and modify style'
Dim modStyle As String = Strings.Replace(elementsWithPics(j).GetAttributeValue("style", String.Empty), keyURL, imgsrc, 1, 1, 1)
elementsWithPics(j).SetAttributeValue("style", modStyle)
Next : Erase elementsWithPics
Next
'Get final html'
Dim tw As New StringWriter()
htmlDoc.Save(tw) : html = tw.ToString : tw.Close() : tw.Dispose()
Return html
End Function
这是什么编程语言? – 2017-11-03 14:20:39
这是VB.Net。它使用开源软件包“Fizzler.Systems.HtmlAgilityPack”和商业软件包“Chilkat.Mime”。但是奇尔卡特可以被“System.Net.Mime”类取代。 – Zagavarr 2017-11-13 12:37:06
火狐具有嵌入式工具。转到菜单(如果隐藏,请按Alt键)File->Convert saved pages
。
第1步:在浏览器中打开.MHT/.MHTML文件。
第2步:右键点击选择查看源代码。
第3步:复制源代码并将其粘贴到新的.TXT文件,然后将文件扩展名更改为.HTML。
- 1. C#将HTML转换为MHT文件
- 2. 以编程方式生成.mht文件
- 3. 以编程方式将文档文件转换为使用C#的PDF文件
- 4. 使用Java以编程方式将HTML/MXML文件转换为Word文档
- 5. 如何以编程方式将Keynote文件转换为PowerPoint?
- 6. 如何以编程方式将.cal文件转换为.cg4?
- 7. 如何以编程方式将Word文件转换为PDF?
- 8. 使用java将.mht文件转换为pdf文件
- 9. 如何以编程方式将PDF文件转换为文本文件?
- 10. 以编程方式将HTML文件转换为epub文件(命令行ubuntu)
- 11. 使用WORD /第三方工具以编程方式将文档转换为pdf
- 12. 如何在iOS(或)中播放.h264文件如何以编程方式将.h264文件转换为.mp4文件
- 13. 以编程方式将docx文件转换为文档
- 14. 如何以编程方式将Word文件转换为使用Word 2007的PDF?
- 15. 将Office文档以编程方式或第三方工具转换为XPS文件
- 16. 如何在iPhone或iPad上以编程方式将.caf转换为.mp3文件?
- 17. 将HTML转换为MHTML
- 18. 以编程方式将复杂的Excel文件转换为HTML格式
- 19. 使用C#将MHTML转换为HTML#
- 20. 使用rxAndroid将常规方法转换为函数式编程
- 21. 将mht转换为html
- 22. 如何以编程方式将.xls和.csv文件转换为.xlsx?
- 23. 如何以编程方式将文本转换为prc/mobi文件?
- 24. 将.wmv文件转换为.mp4以编程方式 - 目标c
- 25. 在ios4上以编程方式将caf文件转换为m4r
- 26. 以编程方式将txt文件从ANSI转换为UTF-8
- 27. 以编程方式将Speex文件转换为MP3?
- 28. 以编程方式将autocad文件转换为Visio图
- 29. 使用Java API将Excel文件转换为MHTML
- 30. 我可以使用CSS将HTML选择转换为“常规文本”吗?
你打算使用哪种编程语言? – 2017-11-03 14:24:00