Ich möchte alle Script-Tags aus einem HtmlDocument auskommentieren. Auf diese Weise werden die Skripte beim Rendern des Dokuments nicht ausgeführt, aber wir können immer noch sehen, was da war. Leider scheitert mein derzeitiger Ansatz:
foreach (var scriptTag in htmlDocument.DocumentNode.SelectNodes("//script"))
{
var commentedScript = new HtmlNode(HtmlNodeType.Comment, htmlDocument, 0) { InnerHtml = scriptTag.ToString() };
scriptTag.ParentNode.AppendChild(commentedScript);
scriptTag.Remove();
}
Beachten Sie, dass ich dies mit dem Ersetzen von Funktionen im HTML tun kann, aber ich denke nicht, dass es so robust wäre:
domHtml = domHtml.Replace("<script", "<!-- <script");
domHtml = domHtml.Replace("</script>", "</script> -->");
Versuche dies:
foreach (var scriptTag in htmlDocument.DocumentNode.SelectNodes("//script"))
{
var commentedScript = HtmlTextNode.CreateNode(string.Format("<!--{0}-->", scriptTag.OuterHtml));
scriptTag.ParentNode.ReplaceChild(commentedScript, scriptTag);
}
Beziehen Sie sich auf diese SO Post - sehr saubere Lösung, die die Linq Abfrageunterstützung des HTML Agility Packs verwendet: htmlagilitypack - Skript und Stil entfernen?