C # Html Agility Pack (SelectSingleNode) - PullRequest
       32

C # Html Agility Pack (SelectSingleNode)

7 голосов
/ 29 сентября 2010

Я пытаюсь разобрать это поле, но не могу заставить его работать.Текущая попытка:

var name = doc.DocumentNode.SelectSingleNode("//*[@id='my_name']").InnerHtml;


<h1 class="bla" id="my_name">namehere</h1>

Ошибка: ссылка на объект не установлена ​​для экземпляра объекта.

Оцените любую помощь.

@ Джон - я могу заверить, что HTMLправильно загружен.Я пытаюсь прочитать мое имя в Facebook для учебных целей.Вот скриншот из плагина Firebug.Я использую версию 1.4.0.

http://i54.tinypic.com/kn3wo.jpg

Мне кажется, проблема в том, что profile_name является дочерним узлом или чем-то другим, поэтому я не могу его прочитать?

Ответы [ 4 ]

19 голосов
/ 30 сентября 2010

Причина, по которой ваш код не работает, заключается в том, что на странице есть JavaScript, который фактически записывает тег <h1 id='profile_name'>, поэтому, если вы запрашиваете страницу у агента пользователя (или через AJAX), который не ' Выполните JavaScript, тогда вы не найдете элемент.

Мне удалось получить собственное имя, используя следующий селектор:

string name = 
    doc.DocumentNode.SelectSingleNode("//a[@id='navAccountName']").InnerText;
0 голосов
/ 11 июля 2014
 public async Task<List<string>> GetAllTagLinkContent(string content)
    {


        string html = string.Format("<html><head></head><body>{0}</body></html>", content);
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(html);
        var nodes = doc.DocumentNode.SelectNodes("//[@id='my_name']");
        return nodes.ToList().ConvertAll(r => r.InnerText).Select(j => j).ToList();

    }

Все в порядке с ("// a [@href]");Вы можете попробовать это, как указано выше. Надеюсь, полезно

0 голосов
/ 23 июля 2011
HtmlAgilityPack.HtmlNode name = doc.DocumentNode.SelectSingleNode("//h1[@id='my_name']").InnerText;
0 голосов
/ 29 сентября 2010

Попробуйте это:

var name = doc.DocumentNode.SelectSingleNode("//@id='my_name'").InnerHtml;
...