系统.当尝试使用Xpath访问span (c#)时出现ArgumentNullException异常



所以我一直试图得到一个程序工作,我从谷歌财经关于不同的股票统计信息。到目前为止,我还不能从跨度中获得信息。到目前为止,我已经硬编码了直接访问苹果股票的权限。Apple股票链接:https://www.google.com/finance?q=NASDAQ%3AAAPL&ei=NgItWIG1GIftsAHCn4zIAg

我无法理解的是,当我在chrome控制台使用以下命令尝试时,我收到正确的输出:

$x("//*[@id="appbar"]//div//div//div//span");

这是我在Visual studio 2015中安装了Html Agility Pack的当前代码(我怀疑currDocNodeCompanyName中存在错误):

class StockDataAccess
{
    HtmlWeb web= new HtmlWeb();
    private List<string> testList;
    public void FindStock()
    {
        var histDoc = web.Load("https://www.google.com/finance/historical?q=NASDAQ%3AAAPL&ei=q9IsWNm4KZXjsAG-4I7oCA.html");
        var histDocNode = histDoc.DocumentNode.SelectNodes("//*[@id="prices"]//table//tr//td");
        var currDoc = web.Load("https://www.google.com/finance?q=NASDAQ%3AAAPL&ei=CdcsWMjNCIe0swGd3oaYBA.html");
        var currDocNodeCurrency = currDoc.DocumentNode.SelectNodes("//*[@id="ref_22144_elt"]//div//div");
        var currDocNodeCompanyName = currDoc.DocumentNode.SelectNodes("//*[@id="appbar"]//div//div//div//span");
        var histDocText = histDocNode.Select(node => node.InnerText);
        var currDocCurrencyText = currDocNodeCurrency.Select(node => node.InnerText);
        var currDocCompanyName = currDocNodeCompanyName.Select(node => node.InnerText);
        List<String> result = new List<string>(histDocText.Take(6));
        result.Add(currDocCurrencyText.First());
        result.Add(currDocCompanyName.Take(2).ToString());
        testList = result;
    }
    public List<String> ReturnStock()
    {
        return testList;
    }
}

我一直在尝试Xpath表达式[text],并收到了一个输出,我可以使用chrome控制台工作,但不是在VS.我也一直在尝试一个foreach-loop,一些人建议它给别人。

class StockDataAccess
{
    HtmlWeb web= new HtmlWeb();
    private List<string> testList;
    public void FindStock()
    {
        ///same as before
        var currDoc = web.Load("https://www.google.com/finance?q=NASDAQ%3AAAPL&ei=CdcsWMjNCIe0swGd3oaYBA.html");
        HtmlNodeCollection currDocNodeCompanyName = currDoc.DocumentNode.SelectNodes("//*[@id="appbar"]//div//div//div//span");
        ///Same as before
        List <string> blaList = new List<string>();
        foreach (HtmlNode x in currDocNodeCompanyName)
        {
            blaList.Add(x.InnerText);
        }
        List<String> result = new List<string>(histDocText.Take(6));
        result.Add(currDocCurrencyText.First());
        result.Add(blaList[1]);
        result.Add(blaList[2]);
        testList = result;
    }
    public List<String> ReturnStock()
    {
        return testList;
    }
}

如果有人能给我指出正确的方向,我将非常感激。

如果您检查currDoc.DocumentNode.InnerHtml的内容,您会注意到没有id为"appbar"的元素,因此结果是正确的,因为xpath不返回任何东西。

我怀疑你试图找到的html元素是由脚本(例如js)生成的,这就解释了为什么你可以在浏览器上看到它,而不是在HtmlDocument对象上看到它,因为htmllagilitypack不渲染脚本,它只下载和解析原始源代码。

最新更新