C# 无法显示节点';使用HtmlAgilityPack创建内容

C# 无法显示节点';使用HtmlAgilityPack创建内容,c#,html,dom,web-scraping,html-agility-pack,C#,Html,Dom,Web Scraping,Html Agility Pack,我在这个网址上有数据垃圾问题: 问题是:我已经编写了一个代码,用来抓取某个节点的内容并将其显示在控制台上。但是,节点和特定节点本身的内容似乎无法访问,但我知道它们的存在是因为我在代码中创建了一个条件,以便让我知道是否找到了具有特定主体的节点,并且确实找到了该节点,但由于某种原因未显示该节点: private static void getTextArt(string font, string word) { HtmlWeb web = new HtmlWe

我在这个网址上有数据垃圾问题:

问题是:我已经编写了一个代码,用来抓取某个节点的内容并将其显示在控制台上。但是,节点和特定节点本身的内容似乎无法访问,但我知道它们的存在是因为我在代码中创建了一个条件,以便让我知道是否找到了具有特定主体的节点,并且确实找到了该节点,但由于某种原因未显示该节点:

private static void getTextArt(string font, string word)
        {
            HtmlWeb web = new HtmlWeb();
            //cureHtml method is just meant to return the http address
            HtmlDocument htmlDoc = web.Load(cureHtml(font, word));
            if(web.Load(cureHtml(font, word)) != null)
                Console.WriteLine("Connection Established");
            else
                Console.WriteLine("Connection Failed!");

            var nodes = htmlDoc.DocumentNode.SelectSingleNode(nodeXpath).ChildNodes;

            foreach(HtmlNode node in nodes)
            {
                if(node != null)
                    Console.WriteLine("Node Found.");
                else
                    Console.WriteLine("Node not found!");

                Console.WriteLine(node.OuterHtml);
            }
        }

        private const string nodeXpath = "//div[@id='maincontent']";
}

网站显示的Html如下所示:

当我在控制台上运行代码以检查节点及其内容并尝试显示Xpath的OuterHtml字符串时,控制台将这样向我显示它:


我希望你们中的一些人能够向我解释为什么会这样。我已经在谷歌上尝试了两天的各种搜索,试图找出问题所在,但毫无用处。提前感谢大家。

您想要的内容是动态加载的

改用
HtmlWeb.LoadFromBrowser()
方法。另外,检查
htmlDoc
中的
null
,而不是调用它两次。您当前的逻辑无法保证您的状态

        HtmlDocument htmlDoc = web.LoadFromBrowser(cureHtml(font, word));
        if (htmlDoc != null)
            Console.WriteLine("Connection Established");
        else
            Console.WriteLine("Connection Failed!");
此外,还需要对结果进行解码

            Console.WriteLine(WebUtility.HtmlDecode(node.OuterHtml));

如果这不起作用,那么您的
cureHtml()
方法将被破坏,或者您的目标是.NET Core:)

动态加载您想要的内容

改用
HtmlWeb.LoadFromBrowser()
方法。另外,检查
htmlDoc
中的
null
,而不是调用它两次。您当前的逻辑无法保证您的状态

        HtmlDocument htmlDoc = web.LoadFromBrowser(cureHtml(font, word));
        if (htmlDoc != null)
            Console.WriteLine("Connection Established");
        else
            Console.WriteLine("Connection Failed!");
此外,还需要对结果进行解码

            Console.WriteLine(WebUtility.HtmlDecode(node.OuterHtml));

如果这不起作用,那么您的
cureHtml()
方法将被破坏,或者您的目标是.NET Core:)

谢谢。但是现在我在LoadFromBrowser方法上遇到了问题。错误显示为“HtmlWeb不包含”LoadFromBrowser的定义“。似乎经历过相同问题的人也遇到了同样的问题,因为他们运行的是.NET Core 2.0,而我运行的是3.1.102版。你知道我怎样才能解决这个问题吗?提前谢谢你。@BrunoMazzei我没有费心问你的目标是哪个框架,这是我的错<代码> LoadFromBrowser < /COD>在HTMLGraciPyPACK的.NET核心构建中是不可用的,因为它使用了<代码> WebBuels控件,它也不是.NET内核的一部分,因为它是基于IE.如果这是严格的Windows应用程序,而且很简单,而且你很忙,那么你可以考虑切换到“正常”。.NET框架。或者,找到一种在.NETCore上运行Ajax脚本的方法。一个有趣的练习(以及更好的整体解决方案)可能是定位并调用直接生成ASCII Art的端点。谢谢。但是现在我在LoadFromBrowser方法上遇到了问题。错误显示为“HtmlWeb不包含”LoadFromBrowser的定义“。似乎经历过相同问题的人也遇到了同样的问题,因为他们运行的是.NET Core 2.0,而我运行的是3.1.102版。你知道我怎样才能解决这个问题吗?提前谢谢你。@BrunoMazzei我没有费心问你的目标是哪个框架,这是我的错<代码> LoadFromBrowser < /COD>在HTMLGraciPyPACK的.NET核心构建中是不可用的,因为它使用了<代码> WebBuels控件,它也不是.NET内核的一部分,因为它是基于IE.如果这是严格的Windows应用程序,而且很简单,而且你很忙,那么你可以考虑切换到“正常”。.NET框架。或者,找到一种在.NETCore上运行Ajax脚本的方法。一个有趣的练习(以及更好的整体解决方案)可能是定位并调用直接生成ASCII Art的端点。