使用C#中的HtmlAgilityPack进行屏幕抓取。无法检索innertext

时间:2014-08-31 20:30:21

标签: c# xpath html-agility-pack xpathnavigator

我正在尝试编写一个应用程序,它在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]的xpath /锂[2] /跨度[2]"

现在我有了这个尝试使用存储的xpath获取innertext:

        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 im检索的问题,或者当它厌倦了刮取信息时的xpath。我猜测我的一种方法中的代码是错误的,但我无法弄清楚哪一种。

0 个答案:

没有答案