如何使用 HTMLAgilityPack 在页面上获取 URL,当源不包含 URL 时

本文关键字:URL 包含 获取 HTMLAgilityPack 何使用 | 更新日期: 2023-09-27 18:35:32

我正在尝试从此页面中抓取知识库网址:https://support.microsoft.com/en-us/kb/894199

在页面上,有以下网址:https://support.microsoft.com/kb/2976978

如果您在 Chrome 中打开开发者工具,则会显示数据包含如下内容:

<div class="indent">
<a id="kb-link-142" href="https://support.microsoft.com/kb/2976978" target="_self">https://support.microsoft.com/kb/2976978</a>
</div>

现在基于上面的 HTML,我相信我应该能够像这样从 href 元素中抓取 URL:

foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
   list.Add(link.GetAttributeValue("href", string.Empty));
}

不过,我遇到的问题是,当我下载 HTMLSource 时,内容会发生变化。我的意思是,即使开发人员工具在页面上显示上述可用的 HTML,如果您右键单击页面并选择查看源代码,它此时显示的 HTML 也完全不同,并且不包含呈现页面显示的任何 URL。

我的理论是,存在某种文件引用,其中HTML在某处加载文件,并且该文件包含所呈现页面的详细信息。那么我如何使用 HTMLAgilityPack 来获取呈现页面上的 URL,因为源代码似乎不包含它们?

另外 - 我意识到我的问题标题可能真的很令人困惑。如果这个页面正在做什么/它是如何工作的有一个技术术语,请告诉我,我可以更新标题,使其更合乎逻辑,其他人可以在将来搜索它。

如何使用 HTMLAgilityPack 在页面上获取 URL,当源不包含 URL 时

好的,我现在看到了问题。此页面使用 Angularjs 指令和绑定,并且 hrefs 正在加载帖子页面加载。我们得到的页面是在 Web 浏览器代理进行任何解析/执行之前。这意味着任何 DOM 手稿/javascript 或 ajax 修改后页面上的更改将不会包含在 HtmlDocument 响应中。我认为解决这个问题的方法是假装像一个 Web 浏览器请求,让 javascript 和 ajax 完全执行并按照此处的建议获取内容。希望这有帮助!