我正在尝试编写一个应用程序,该应用程序在 Web 浏览器中获取节点的 xpath,然后将其存储以供以后抓取。
我有这个来获取浏览器的点击事件:
private void htmlDocument_Click(object sender, HtmlElementEventArgs e)
{
HtmlElement element = this.wbrBrowser.Document.GetElementFromPoint(e.ClientMousePosition);
var savedId = element.Id;
var uniqueId = Guid.NewGuid().ToString();
element.Id = uniqueId;
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(element.Document.GetElementsByTagName("html")[0].OuterHtml);
element.Id = savedId;
var node = doc.GetElementbyId(uniqueId);
var xpath = node.XPath;
lblXpath.Text = xpath;
lblPrice.Text = GetPrice(xpath);
}
它“似乎”有效。它确实返回 "/html[1]/body[1]/div[3]/div[2]/div[3]/div[1]/div[1]/ul[1]/li[ 2]/跨度[2]"
现在我有这个尝试使用存储的 xpath 获取内部文本:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(lstURL.Text);
XPathNavigator docNav = doc.CreateNavigator();
XPathNavigator node = docNav.SelectSingleNode(xpath);
if (node != null)
{
price = node.Value;
}
else
{
MessageBox.Show("Error: Node was Null!");
}
return price;
}
但是每次我尝试第二种方法时,节点都是空的。我不知道它是否是我检索的 xpath 的问题,或者当它厌倦了抓取信息时的 xpath。我猜我的一种方法中的代码是错误的,但我无法确定是哪一种。