如何在HTMLDocument中按名称查找特定的div?

时间:2014-05-12 20:03:36

标签: c# html wpf mshtml dom

我真的很难浏览HTMLDocument课程中的所有属性。我有一个网页,我在WebBrowser嵌入的WPF Window中加载。我有一个像

这样的活动
    private void _browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        HTMLDocument document = (HTMLDocument) this._browser.Document;
        if (document.body != null)
        {
            this.Height = //get the div with the id 'wrapper' and get it's height
        }
    }

基本上。当页面完成导航时,我想获得HTML中特定分隔符的高度。

以下是HTML的外观:

<html lang="en-US">
    <head>…</head>
    <div id = "wrapper">…</div>
    <body blah blah blah>…</body>
</html>

似乎我找不到这个HTML,虽然它在HTMLDocument类中。我想获得这个分隔符的高度,并将窗口高度设置为此分隔符的高度以及其他任何需要按钮和其他内容的空间。

我应该在哪里搜索?

起初,我正在尝试

HTMLDocument document = (HTMLDocument) this._browser.Document;
this.Height= document.body.offsetHeight

但这远远不够正确,而且我似乎无法找到我已阅读的HTMLElement类型的任何内容,您可以在其中访问单个HTMLElement

如果您以前曾在这个班级工作过,或者可以看到我出错的地方,我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

请下载HTML Agility Pack并将其添加到项目参考

protected void BtnIndex_Click(object sender, EventArgs e)
{
    string source = getHtml("http://stackoverflow.com");
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(source);
    HtmlNodeCollection cont;
    cont = doc.DocumentNode.SelectNodes("//div[@id='wrapper']");
}

string getHtml(string url)
{
    string Shtml = string.Empty; ;
    try
    {
        //WebClient client = new WebClient();
        //client.Encoding = Encoding.UTF8;
        //Shtml = client.DownloadString(url);
        //Shtml = new WebClient().DownloadString(url); bejoz utf-8

        HttpWebRequest myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);

        myWebRequest.Method = "GET";

        // Make request for web page
        HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();

        StreamReader myWebSource = new StreamReader(myWebResponse.GetResponseStream());


        Shtml = myWebSource.ReadToEnd();
        myWebResponse.Close();
    }
    catch
    {
        Response.Write(" error: " + url + Environment.NewLine);
    }
    return Shtml;
}