GetElementsByTagName in C#
本文关键字:in GetElementsByTagName | 更新日期: 2023-09-27 18:32:29
我有这段代码:
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>
标签输出到消息框,但是当我对其进行测试时,我不断收到此错误:
对象引用未设置为对象的实例。
您的问题是您在加载文档之前访问Document
对象 - WebBrowser
是异步的。只需使用 HTML Agility Pack 等库解析 HTML。
下面介绍了如何使用 HTML 敏捷包获取<meta>
标记。(假设using System.Net;
和using HtmlAgilityPack;
。
// 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.
}
}
在
文档完成加载之前,不应尝试访问文档。在 DocumentCompleted
事件的处理程序中运行该代码。
但马蒂是对的。如果您只需要读取 HTML,则不应使用WebBrowser
。只需获取文本并使用 HTML 解析器对其进行解析。
您可以直接从 WebBrowser 控件中检索 META 标记和任何其他 HTML 元素,不需要 HTML Agility Pack 或其他组件。
就像 Mark 说的,先等待 DocumentDone 事件:
webBrowser.DocumentCompleted += WebBrowser_DocumentCompleted;
然后,您可以从 HTML 文档中捕获任何元素和内容。以下代码获取标题和元描述:
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");
}
}
}