HtmlAgilitypack SelectSingleNode "System.NullReferenceException"
HtmlAgilitypack SelectSingleNode "System.NullReferenceException"
这是我的代码:
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);
到目前为止一切正常,但是如果我在 "SelectSingleNode" 中添加一个“/ div”,那么它将无法正常工作(错误消息:"Exception thrown:" System.NullReferenceException ""),尽管那里的 HTML 代码中还有另一个 "div"。
我认为是因为在下一个"div"之前的HTML代码中有一个“:: before”,但前提是我在浏览器中分析它
部分HTML代码:
<div class="un-page__body">
<div class="container-fluid">
::before
<div class="row">
::before
<div class="col-sm-6">
当您使用 F12 / 开发工具查看 HTML 时,HTML 您看到的与您在 HtmlAgilityPack 或任何其他网络抓取工具中看到的非常不同。
原因
您的代码不起作用,也不会起作用,因为整个文档中只有两个 div 标记。 /html/body/div 会起作用,因为其中有两个,仅此而已。剩下的只是 js
个脚本。
当您在 chrome 中加载 URL 时,chrome 编译数据,执行脚本,然后呈现它呈现的数据以向您展示您应该看到的内容.
您提供的 URL 在其主体中只有脚本可以执行并生成您在 Dev / Tools 中看到的 divs,此时,HTML Agility Pack无法执行脚本并呈现已编译的 HTML 供您浏览。
您在 HTMLAgilityPack
中得到了什么
当你查看doc.DocumentNode中的代码时,你只会看到这个
<div id="app">
WebUntis wird geladen ...
</div>
Chrome / IE 将加载其他内容,因为那是在编译/渲染之后。您想要做的是 运行 HTMLAgilityPack 中的脚本.. 这不是您目前可以做的事情。
您在 Chrome / 浏览器中看到的内容
<div id="app">
<div style="height: 100%;">
<div class="un-app">
<nav class="un-app-header navbar navbar-default">
<div class="container-fluid">
...
这是我的代码:
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);
到目前为止一切正常,但是如果我在 "SelectSingleNode" 中添加一个“/ div”,那么它将无法正常工作(错误消息:"Exception thrown:" System.NullReferenceException ""),尽管那里的 HTML 代码中还有另一个 "div"。
我认为是因为在下一个"div"之前的HTML代码中有一个“:: before”,但前提是我在浏览器中分析它
部分HTML代码:
<div class="un-page__body">
<div class="container-fluid">
::before
<div class="row">
::before
<div class="col-sm-6">
当您使用 F12 / 开发工具查看 HTML 时,HTML 您看到的与您在 HtmlAgilityPack 或任何其他网络抓取工具中看到的非常不同。
原因
您的代码不起作用,也不会起作用,因为整个文档中只有两个 div 标记。 /html/body/div 会起作用,因为其中有两个,仅此而已。剩下的只是 js
个脚本。
当您在 chrome 中加载 URL 时,chrome 编译数据,执行脚本,然后呈现它呈现的数据以向您展示您应该看到的内容.
您提供的 URL 在其主体中只有脚本可以执行并生成您在 Dev / Tools 中看到的 divs,此时,HTML Agility Pack无法执行脚本并呈现已编译的 HTML 供您浏览。
您在 HTMLAgilityPack
中得到了什么当你查看doc.DocumentNode中的代码时,你只会看到这个
<div id="app">
WebUntis wird geladen ...
</div>
Chrome / IE 将加载其他内容,因为那是在编译/渲染之后。您想要做的是 运行 HTMLAgilityPack 中的脚本.. 这不是您目前可以做的事情。
您在 Chrome / 浏览器中看到的内容
<div id="app">
<div style="height: 100%;">
<div class="un-app">
<nav class="un-app-header navbar navbar-default">
<div class="container-fluid">
...