htmlagilitypack xpath funktioniert nicht

c# html-agility-pack xpath

Frage

Ich habe ein Problem, dass mein XPath nicht funktioniert.

Ich versuche, die URL des nächsten Links von Google.com unten zu finden.

Aber ich kann nicht auf URL mit Xpath erreichen.

Bitte hilf mir meinen Xpath zu korrigieren. Sag mir auch, was an der Stelle sein sollte ??

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 );
}

Akzeptierte Antwort

Das Seltsame hier ist, dass HtmlAgilityPack irgendwie das id Attribut des "Next" -Links nicht erkennt.

Dies könnte ein Fehler in HtmlAgilityPack sein; Sie können es im HAP Issue Tracker veröffentlichen .

In der Zwischenzeit habe ich diese Problemumgehung gefunden:

  • finde die Tabelle, die die Seitenwechselelemente enthält (die Tabelle mit id="nav" ). Für dieses Element wird die ID korrekt erkannt
  • nimm die erste (und einzige tr ) in der Tabelle und die letzte td davon (mit der XPath last() Funktion)
  • nimm das a Element in der td wir im vorherigen Schritt erhalten haben.

Lange Rede, kurzer Sinn, hier ist der Code:

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"));

Aktualisieren

Nach Simons Kommentar habe ich das nochmal überprüft und die Schlussfolgerung ist, dass dies kein Bug im HTML Agility Pack ist; Das Attribut id="pnnext" ist nur vorhanden, wenn die Anforderung von einem Browser gestellt wird (möglicherweise abhängig vom Wert des UserAgent- Headers). Wenn Sie einen HttpWebRequest vom Code ausführen, wird der Link "Next" in der Ausgabe angezeigt:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum