首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetElementsByTagName in C#

GetElementsByTagName in C#
EN

Stack Overflow用户
提问于 2012-04-29 00:02:49
回答 3查看 9.1K关注 0票数 0

我有一段代码:

代码语言:javascript
复制
string x = textBox1.Text;
string[] list = x.Split(';');
foreach (string u in list)
{
    string url = "http://*********/index.php?n=" + u;
    webBrowser1.Navigate(url);
    webBrowser1.Document.GetElementsByTagName("META");
}

我试图将<META>标记输出到消息框中,但是当我测试它时,我总是得到以下错误:

对象引用未设置为对象的实例。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-29 00:07:50

您的问题是在文档加载之前访问Document对象--WebBrowser是异步的。只需使用像HTML敏捷包这样的库来解析HTML。

下面是使用HTML获取<meta>标记的方法。(假设是using System.Net;using HtmlAgilityPack;。)

代码语言:javascript
复制
// Create a WebClient to use to download the string:
using(WebClient wc = new WebClient()) {
    // Create a document object
    HtmlDocument d = new HtmlDocument();

    // Download the content and parse the HTML:        
    d.LoadHtml(wc.DownloadString("http://stackoverflow.com/questions/10368605/getelementsbytagname-in-c-sharp/10368631#10368631"));

    // Loop through all the <meta> tags:
    foreach(HtmlNode metaTag in d.DocumentNode.Descendants("meta")) {
        // It's a <meta> tag! Do something with it.
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-04-29 00:06:08

在文档加载完成之前,您不应该尝试访问它。在DocumentCompleted事件的处理程序中运行该代码。

但马蒂是对的。如果您只需要读取HTML,就不应该使用WebBrowser。只需获取文本并使用HTML解析器解析它。

票数 2
EN

Stack Overflow用户

发布于 2013-06-05 16:41:35

您可以直接从您的WebBrowser控件中检索元标记和任何其他HTML元素,不需要或其他组件。

就像Mark说的,先等待DocumentCompleted事件:

代码语言:javascript
复制
webBrowser.DocumentCompleted += WebBrowser_DocumentCompleted;

然后,您可以从HTML文档中捕获任何元素和内容。以下代码获取标题和元描述:

代码语言:javascript
复制
private void WebBrowser_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
{
        System.Windows.Forms.WebBrowser browser = sender as System.Windows.Forms.WebBrowser;
        string title = browser.Document.Title;
        string description = String.Empty;
        foreach (HtmlElement meta in browser.Document.GetElementsByTagName("META"))
        {
            if (meta.Name.ToLower() == "description")
            {
                description = meta.GetAttribute("content");
            }
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10368605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档