htmlagilitypack xpath не работает

c# html-agility-pack xpath

Вопрос

У меня проблема, что мой xpath не работает.

Я пытаюсь получить ссылку на следующую ссылку Google.com внизу.

Но я не могу связаться с url, используя Xpath.

Пожалуйста, помогите мне в исправлении моего xpath. Также скажите мне, что должно быть на месте?

HtmlWeb hw = new HtmlWeb();

HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=seo");
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//*[@id='pnnext']");

foreach (HtmlNode linkNode in linkNodes)
{
    HtmlAttribute link = linkNode.Attributes["href"];
    MessageBox.Show(link.Value );
}

Принятый ответ

Самое странное здесь, что HtmlAgilityPack не признает атрибут id ссылки «Далее».

Это может быть ошибка в HtmlAgilityPack; вы можете опубликовать его в HAP Issue Tracker .

Тем не менее, в то же время я нашел это решение:

  • найдите таблицу, содержащую элементы поискового вызова (таблица с id="nav" ). Для этого элемента идентификатор правильно распознан
  • возьмите первый (и только tr ) в таблице и последний td из него (используя функцию XPath last() )
  • взять a элемент внутри td мы получили на предыдущем шаге.

Короче говоря, вот код:

var doc = new HtmlWeb().Load("http://www.google.com/search?q=seo");

var nextLink = doc.DocumentNode
    .SelectSingleNode("//table[@id='nav']/tr/td[last()]/a");

Console.WriteLine(nextLink.GetAttribute("href", "err"));

Обновить

После комментария Саймона я проверил это снова, и вывод заключается в том, что это не ошибка в HTML Agility Pack; атрибут id="pnnext" присутствует только тогда, когда запрос выполняется браузером (возможно, в зависимости от значения заголовка UserAgent ). Когда вы делаете HttpWebRequest из кода, так выглядит ссылка «Next» на выходе:

<a href="/search?q=seo&amp;hl=en&amp;ie=UTF-8&amp[...]" style="text-align:left">


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему