Возникают проблемы с отображением содержимого узла с помощью HtmlAgilityPack - PullRequest
1 голос
/ 13 апреля 2020

У меня проблемы с обработкой данных на этом веб-адресе: http://patorjk.com/software/taag/#p = display & f = Граффити & t = Тип% 20Something% 20 .

Проблема в том, что я написал код, который должен захватить содержимое определенного узла и отобразить его на консоли. Тем не менее, содержимое внутри узла и самого узла c кажется недостижимым, но я знаю, что оно существует для того факта, что я создал условие в своем коде, чтобы сообщить мне, если узлы находятся в определенном теле находят, и он действительно найден, но по какой-то причине не отображается:

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, отображаемый на сайте, выглядит следующим образом:

Html код на сайте. Стрелки указывают на узел, которого я пытаюсь достичь, и содержимое в нем, которое я пытаюсь отобразить на консоли

Когда я запускаю свой код на консоли, чтобы проверить узел и его содержимое и попробуйте отобразить Outer Html строку Xpath, вот как консоль отобразит ее мне:

Отображение окна консоли

Я надеюсь, что некоторые из вас в состоянии объяснить мне, почему он так себя ведет. Я пробовал все виды поиска в Google в течение двух дней, пытаясь выяснить проблему без толку. Спасибо всем заранее.

1 Ответ

0 голосов
/ 13 апреля 2020

желаемый контент загружается динамически.

Вместо этого используйте метод HtmlWeb.LoadFromBrowser(). Кроме того, проверьте htmlDoc для null, вместо того, чтобы вызывать его дважды. Ваша текущая логика c не гарантирует ваше состояние.

        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:)

...