2

我是 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 表达式确实有问题,我对此一无所知。哪位好心人能给点建议?非常感谢!

4

1 回答 1

4

首先,您的代码doc.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);
于 2013-09-01T11:08:09.043 回答