当源不包含网址时,如何使用HTMLAgilityPack在网页上获取网址?

时间:2016-02-21 19:54:11

标签: c# html html-agility-pack

我正在尝试从此页面抓取KB Urls: 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,因为源代码似乎不包含它们?

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

1 个答案:

答案 0 :(得分:0)

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