我是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,仅支持文件路径。您应该使用HtmlWebLoad方法下载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/

10-11 00:50