HtmlAgilitypack SelectSingleNode "System.NullReferenceException" - PullRequest
0 голосов
/ 18 января 2020

Это мой код:

var html = webBrowser1.DocumentText;

            HtmlWeb web = new HtmlWeb();

            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(html);

            var node = htmlDoc.DocumentNode.SelectSingleNode("/html/body/div/div/div/div/section/section/div/div/div/div").Attributes["class"].Value;


            Console.WriteLine("Node Name: " + node);

Пока все работает нормально, но если я добавлю "/ div" к "SelectSingleNode", он не будет работать (сообщение об ошибке: "Возникло исключение: "System.NullReferenceException" "), хотя в коде HTML есть еще один" div ".

Я думаю, это потому, что в коде HTML перед следующим" div "есть" :: before ", но только если я проанализирую его в браузере

Часть кода HTML:

 <div class="un-page__body">
    <div class="container-fluid">
       ::before
    <div class="row">
       ::before
       <div class="col-sm-6">

1 Ответ

0 голосов
/ 19 января 2020

Когда вы смотрите на HTML с помощью F12 / Dev Tools, HTML, который вы видите, сильно отличается от того, что вы видите в HtmlAgilityPack или любом другом инструменте для просмотра веб-страниц.

Причина

Ваш код не работает и не будет работать, потому что во всем документе есть только два тега div. / html / body / div будет работать, потому что есть два из них, и это все. Отдых это просто js сценарии.

Когда вы загружаете URL в chrome, chrome компилирует данные, выполняет сценарии, а затем представляет данные, которые они предоставили, чтобы показать вам, что вы должны видеть.

В указанном вами URL-адресе есть только сценарии, которые выполняют и генерируют элементы div, которые вы видите в Dev / Tools, и в настоящее время HTML Agility Pack НЕ может выполнять сценарии и отображать скомпилированный HTML для вас.

Что вы получаете в HTMLAgilityPack

Когда вы смотрите на код в do c .DocumentNode, вы видите только этот

<div id="app">
    WebUntis wird geladen ...
</div>

Chrome / IE будет загружать что-то еще, потому что это после компиляции / рендеринга. Что вы хотите сделать, так это запустить скрипты в HTMLAgilityPack ... что вы не можете сделать в это время.

То, что вы видите в Chrome / Browser

<div id="app">
    <div style="height: 100%;">
        <div class="un-app">
            <nav class="un-app-header navbar navbar-default">
                <div class="container-fluid">
...
...