使用html敏捷包提取html元素属性值

时间:2019-02-27 17:40:57

标签: c# html html-agility-pack

我需要从html页面检索表单防伪令牌。 为此,我使用的是Html Agility Pack,但是我对此并不陌生。

这是我的代码:

var page = new HtmlDocument();

page.LoadHtml(htmlPage);

var tokenNode = page.DocumentNode.SelectSingleNode("/html/body/div[3]/div[2]/form/input").Attributes["value"].Value;

“ tokenNode”变量返回null。

我设法将问题归结为这种方法:

page.DocumentNode.SelectSingleNode("/html/body/div[3]/div[2]/form/input");

如果我仅使用page.DocumentNode.SelectSingleNode("/html/body/div[3]);,它将返回一个值。但是,当我将第二个div添加到我的xpath时,它开始返回null。

我在这里想念什么?

编辑:使用chrome开发人员工具获取xpath。

Edit2:毕竟问题出在我从chrome获得的Xpath中。 TL; DR brwoser中的html代码与我的http请求检索到的html代码不同,因此xpath错误。

Here's更为详尽的解释

1 个答案:

答案 0 :(得分:0)

要从页面获取防伪令牌,您可以通过传递id来调用GetElementById方法

例如

var page = new HtmlDocument();
page.LoadHtml(htmlPage);
string token = page.GetElementbyId("__RequestVerificationToken").GetAttributeValue("value", "");;

您无需遍历嵌套路径