Извлеките значение из html с помощью HtmlAgilityPack

c# html-agility-pack xpath

Вопрос

Я новичок в 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 строке doc.Load , потому что этот метод Load не поддерживает URI, а только путь к файлу. Вы должны использовать HtmlWeb «s 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);


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow