許多工具都可以導出.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