我是C#和htmlagilitypack的新手,我一直在尝试获取signup_form_id的值
这是2079787163
<form name="setupform" id="setupform" method="post" action="/signup/" target="_top">
<input type="hidden" name="form_type" value="blog" />
<input type="hidden" name="stage" value="" />
<input type="hidden" name="loc" value="signup" />
<input type='hidden' name='signup_form_id' value='2079787163' /><input type="hidden" id="_signup_form" name="_signup_form" value="9783b65654" />
这是我的编码
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load("https://signup.wordpress.com/signup/");
var value = doc.DocumentNode.SelectSingleNode("//form[@name='signup_form_id'");
Console.WriteLine(value.InnerText);
我知道我的xpath表达式确实有问题,对此我一无所知。有什么好心的人可以提出建议吗?非常感谢!
最佳答案
首先,您的代码在doc.Load
行上失败,因为该“ Load”方法不支持URI,仅支持文件路径。您应该使用HtmlWeb
的Load
方法下载HTML。
其次,您的XPath中的缺陷:
您忘记了右括号]
没有名称设置为signup_form_id
的表单
总之,您应该按以下方式修改代码:
var url = "http://signup.wordpress.com/signup/";
var htmlWeb = new HtmlWeb();
var doc = htmlWeb.Load(url);
var value = doc.DocumentNode.SelectSingleNode("//form[@id='setupform']");
Console.WriteLine(value.OuterHtml);
更新:很好地澄清了这个问题;最初我对这个问题有错误的理解。
看起来您在寻找的是
input
标记,而不是form
。因此,应修改您的XPath以符合此要求。这是读取所需数据的代码:
var url = "http://signup.wordpress.com/signup/";
var htmlWeb = new HtmlWeb();
var doc = htmlWeb.Load(url);
var signupFormIdElement = doc.DocumentNode
.SelectSingleNode("//input[@name='signup_form_id']");
var signupFormId = signupFormIdElement.GetAttributeValue("value", "");
Console.WriteLine(signupFormId);
关于c# - 使用HtmlAgilityPack从html中提取值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18557674/