0

我正在尝试编写一个应用程序,该应用程序在 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。我猜我的一种方法中的代码是错误的,但我无法确定是哪一种。

4

0 回答 0