不使用浏览器控件从字符串获取HtmlDocument

时间:2012-05-17 09:40:26

标签: c# browser dom

我使用WebClient获取网页的html代码(作为字符串)。

但是我想把它变成一个HtmlDocument对象,所以我可以使用这个类提供的DOM功能。目前我知道如何操作的唯一方法是使用浏览器控件,如下所示:

            string pageHtml = client.DownloadString(url);

            browser.ScriptErrorsSuppressed = true;

            browser.DocumentText = pageHtml;

            do
            {
                Application.DoEvents();

            } while (browser.ReadyState != WebBrowserReadyState.Complete);

            return browser.Document;

还有另一种方法吗?我知道还有其他浏览器控件可用,但是有更简单的方法吗?

3 个答案:

答案 0 :(得分:7)

您可以使用HtmlAgilityPack ....例如:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var results = doc.DocumentNode
    .Descendants("div")
    .Select(n => n.InnerText);

答案 1 :(得分:2)

我知道这是一个老帖子,但我的翻译是为了像我这样来到这里的其他人

如果您想使用代码.NET here is what you have to do

进行此操作
public System.Windows.Forms.HtmlDocument GetHtmlDocument(string html)
        {
            WebBrowser browser = new WebBrowser();
            browser.ScriptErrorsSuppressed = true;
            browser.DocumentText = html;
            browser.Document.OpenNew(true);
            browser.Document.Write(html);
            browser.Refresh();
            return browser.Document;
        }

答案 2 :(得分:0)

我知道这是一个古老的话题,我的解决方案:

public static class HtmlHelpr{

        public static HtmlDocument HtmlDocumentFromFile(this string PathToHtml){
            using(WebBrowser wb = new WebBrowser()){            
                string s = File.ReadAllText(PathToHtml);
                wb.ScriptErrorsSuppressed = true;
                wb.DocumentText = s;
                var hd = wb.Document;
                hd.Write(s);
                return  hd;
            }
        }
    }