2014-04-28 45 views
2

我wan't更改特定文本一堆的HTML文件,並保存其代碼的其餘部分不變。我發現我會使用Html Agility pack。所以我寫這樣的代碼:停止的Html敏捷包更改源代碼

 string Url = @"http://www.example.com"; 
     HtmlWeb web = new HtmlWeb(); 
     web.UserAgent = @"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36"; 
     HtmlDocument doc = web.Load(Url); 
     doc.Save("a.html"); 

但問題是,網站的來源保存不同於原來的。有沒有辦法阻止更改源代碼。或者,也許還有另一種方式可以在DOM中移動並更改特定的東西(例如,在Chrome開發人員工具中,您可以稍後將其另存爲HTML,然後自動執行)。

-----------編輯--------

例如,它在eBay上看到。我無法發佈鏈接,因爲它是廣告,但如果您只是在任何商品優惠上嘗試此代碼,就會看到發生了什麼。

---------- EDIT2 --------

看來,eBay正在使用iframe,也和HAP不能處理它。它和裏面的標籤被刪除,所以可能這就是爲什麼保存網站差異如此之大的原因。

+0

你可以舉一個例子的改變其決策? – bdimag

+2

之後你在做什麼「HtmlDocument」?從你發佈的內容看來,你真正需要做的就是對網站做一個「HTTP GET」,並將返回的內容作爲一個字符串保存在磁盤上,而HTML Agility Pack沒有增加任何值,只是導致修改您描述的來源。 –

+1

是否有可能您所請求的服務器正在發送基於'UserAgent'的不同文檔? – Claies

回答

3

HtmlAgilityPack(HAP)不一定會寫出它讀取相同的HTML。如果你檢查the source,你會看到寫(WriteTo法)推動了解析的節點。如果原始服務器發送無效HTML,則HAP將在解析過程中將其清除。

如果需要保存原始,使用WebClient.DownloadString,以及與HAP保存的文件加載。

+0

偉大的建議,我認爲適用於這種情況。 –

0

我一直在使用HtmlAgilityPack了很多最近,但我從來沒有經歷過這個問題。

我做的是以下幾點:

var wc = new WebClient(); 
var html = wc.DownloadString(@"http://www.example.com"); 
var doc = new HtmlDocument(); 
doc.LoadHtml(html); 
var nodes = doc.SelectNodes("//XPath/Query"); 

這是否更改HTML內容?

+0

這不會更改內容。但檢查編輯,我想我發現了這個問題。 –