当Source不包含URL时,如何使用HTMLAgilityPack获取页面上的URL?

c# html html-agility-pack

我试图从这个页面刮掉KB Urls: https//support.microsoft.com/en-us/kb/894199

在页面上,有以下URL: 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,因为源似乎不包含它们?

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

热门答案

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




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因