我需要从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更为详尽的解释
答案 0 :(得分:0)
要从页面获取防伪令牌,您可以通过传递id来调用GetElementById方法
例如
var page = new HtmlDocument();
page.LoadHtml(htmlPage);
string token = page.GetElementbyId("__RequestVerificationToken").GetAttributeValue("value", "");;
您无需遍历嵌套路径