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[のxpathを返します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;
}
しかし、2番目の方法を試すたびに、ノードはnullです。xpath im の取得に問題があるのか、情報をスクレイピングするのに疲れたときの xpath に問題があるのか わかりません。メソッドの 1 つのコードが間違っていると推測していますが、どれが正しいのかわかりません。