C# HtmlAlityPack NullReferenceException错误

C# HtmlAlityPack NullReferenceException错误,c#,html-agility-pack,C#,Html Agility Pack,我正在尝试获取文本,但总是出现NullReferenceException错误。我快疯了。它工作了一会儿,但我又开始犯这个错误了。我会拿到帖子的标题 我已尝试更改XPath。我尝试了不同的XPath private void button1_Click(object sender, EventArgs e) { listView1.Items.Clear(); for (int i = 4; i < 9; i++) {

我正在尝试获取文本,但总是出现NullReferenceException错误。我快疯了。它工作了一会儿,但我又开始犯这个错误了。我会拿到帖子的标题

我已尝试更改XPath。我尝试了不同的XPath

    private void button1_Click(object sender, EventArgs e)
    {
        listView1.Items.Clear();

        for (int i = 4; i < 9; i++)
        {
            VeriAl(Url: "https://cracked.to/Forum-Combolists?sortby=started&order=desc&datecut=9999&prefix=0", XPath: "//table[@class='tborder clear']//tr[" + i + "]//td[2]//div[1]//span[1]//span[1]//a", tag: "title",CikanSonuc: listView1);
        }
    }

    public void VeriAl (String Url, String XPath, String tag,ListView CikanSonuc)
    {
        try
        {
            url = new Uri(Url);
        }
        catch (UriFormatException)
        {
            if (MessageBox.Show(text: "UriFormatException", caption: "Hata", buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error) == DialogResult.OK)
            {

            }
        }
        catch (ArgumentNullException)
        {
            if (MessageBox.Show(text: "ArgumentNullException", caption: "Hata", buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error) == DialogResult.OK)
            {

            }
        }

        WebClient client = new WebClient();
        try
        {
            html = client.DownloadString(url);
        }
        catch (WebException)
        {
            if (MessageBox.Show(text: "WebException", caption: "Hata", buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error) == DialogResult.OK)
            {

            }
        }

        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(html);
        try
        {
            CikanSonuc.Items.Add(doc.DocumentNode.SelectSingleNode(XPath).Attributes[tag].Value);
        }
        catch (NullReferenceException)
        {
            if (MessageBox.Show(text: "NullReferenceException", caption: "Hata", buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error) == DialogResult.OK)
            {

            }
        }
private void按钮1\u单击(对象发送者,事件参数e)
{
listView1.Items.Clear();
对于(int i=4;i<9;i++)
{
验证(Url:)https://cracked.to/Forum-Combolists?sortby=started&order=desc&datecut=9999&prefix=0,XPath://table[@class='tborder clear']//tr[“+i+”]//td[2]//div[1]//span[1]///a”,标记:“title”,CikanSonuc:listView1);
}
}
public void VeriAl(字符串Url、字符串XPath、字符串标记、ListView CikanSonuc)
{
尝试
{
url=新Uri(url);
}
捕获(异常)
{
if(MessageBox.Show(文本:“UriFormatException”,标题:“Hata”,按钮:MessageBoxButtons.OK,图标:MessageBoxIcon.Error)=DialogResult.OK)
{
}
}
捕获(异常)
{
if(MessageBox.Show(文本:“ArgumentNullException”,标题:“Hata”,按钮:MessageBoxButtons.OK,图标:MessageBoxIcon.Error)=DialogResult.OK)
{
}
}
WebClient客户端=新的WebClient();
尝试
{
html=client.DownloadString(url);
}
捕获(WebException)
{
if(MessageBox.Show(文本:“WebException”,标题:“Hata”,按钮:MessageBoxButtons.OK,图标:MessageBoxIcon.Error)=DialogResult.OK)
{
}
}
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
尝试
{
CikanSonuc.Items.Add(doc.DocumentNode.SelectSingleNode(XPath).Attributes[tag].Value);
}
捕获(NullReferenceException)
{
if(MessageBox.Show(文本:“NullReferenceException”,标题:“Hata”,按钮:MessageBoxButtons.OK,图标:MessageBoxIcon.Error)=DialogResult.OK)
{
}
}
URL-显示加载屏幕几秒钟,并重定向到自身,向您显示要查看的内容。在重定向之前,它还设置一些浏览器cookie,以便您不再看到加载屏幕,而是看到内容。重定向是使用脚本的客户端

在c#中,您尝试下载页面时,它实际上是下载加载页面的源代码,而不是实际内容。您下载的HTML甚至没有您尝试访问的元素,因此出现空引用异常


解决这一问题将非常棘手,因为这是一个客户端重定向。为了在重定向后检索html,您甚至可能会使用浏览器实例放弃该网页。可能是这样的情况。

问题是,在您尝试获取html时,内容不存在。 如果调用
WebClient.DownloadString()
,加载内容的Javascript代码将不会执行。获取完全加载的网页的唯一方法是使用WebBrowser控件加载该网页,并在加载完成后获取所有内容:

public static class WebViewExtension
{
    public static HtmlAgilityPack.HtmlDocument GetHtmlDocument(this WebBrowser wView)
    {
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(wView.Document.Body.OuterHtml);
        return doc;
    }

    public static async Task<HtmlAgilityPack.HtmlDocument> LoadSiteAndGetHtml(this WebBrowser wView, string siteurl)
    {
        await wView.NavigateAndWait(siteurl);
        HtmlAgilityPack.HtmlDocument doc = wView.GetHtmlDocument();
        return doc;
    }

    public static async Task NavigateAndWait(this WebBrowser wView, string siteurl)
    {
        TaskCompletionSource<bool> loaded = new TaskCompletionSource<bool>();
        wView.Navigate(new Uri(siteurl));
        wView.DocumentCompleted += delegate (object sender, WebBrowserDocumentCompletedEventArgs args)
        {
            loaded?.TrySetResult(true);
        };

        //wait until the website is loaded
        await loaded.Task;
    }
}

您是否提取了获取值的命令并确保它实际获取了值?请更新您的问题以包含
html
的内容。另外,请在多行代码上拆分
CikanSonuc.Items.Add(doc.DocumentNode.SelectSingleNode(XPath).Attributes[tag].value)
(每行末尾都有
)在您的问题中,使每个操作中只有一个
。然后告诉我们哪一行引发异常。您尝试点击的URL在显示加载消息几秒钟后执行客户端重定向到自身。您尝试访问的表实际上不在下载的html中作为downl加载的html是加载页面的一部分。它不会直接到达您想要的页面。
    WebBrowser client = new WebBrowser();
    try
    {
        HtmlDocument doc = await client.LoadSiteAndGetHtml(url);
    }
    catch (WebException)
    {
        if (MessageBox.Show(text: "WebException", caption: "Hata", buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Error) == DialogResult.OK)
        {

        }
    }