尝试使用 HtmlAgilityPack 获取字数,但节点列表返回为 null

Trying to get word count using HtmlAgilityPack, but node list is returning as null

我有以下代码可以获取特定 tags/classes 的某些后代的带有文本的节点,并且它以前可以工作,但我已经 运行 几个月没用这个程序了(没有其他人碰过它)所以我想知道为什么它现在会抛出错误。我的 nodeList 看起来像这样:

var nodesList = doc.DocumentNode
                .SelectNodes("//article[@class='article-content']//div[@class='article-content-block']//text()[not(parent::script)]")
                .Select(node => node.InnerText).ToList();

我查看网页,有多个段落和 ul 标签符合特定的 Xpath 查询,但 nodesList 返回:

System.ArgumentNullException: 'Value cannot be null. (Parameter 'source')'

DocumentNode 的名称为:#document,我认为这是正常的,InnerHtml 显示了整个页面的 HTML,但是 InnerText 显示 Javascript must be enabled for the correct page display。关于为什么它会抛出空值的任何想法?我不记得在 DocumentNodeInnerText 之前见过 Javascript must be enabled for the correct page display,所以我想知道这是否与它有关。

听起来网页内容正在动态加载。这对您的浏览器来说不是问题,因为它会自动执行 Javascript,但 .NET Web 组件不会执行任何操作。您应该能够使用浏览器的开发工具来确定哪个请求实际包含您要查找的内容,然后在您的代码中复制该请求。

也可能是您请求的其他方面与服务器不兼容 - missing/bad HTTP headers、意外的 TLS 版本,甚至可能是防火墙问题 - 导致它 return 不同的反应。