【问题标题】:HtmlAgilityPack Error: Object reference not set to an instance of an objectHtmlAgilityPack 错误:对象引用未设置为对象的实例
【发布时间】:2013-11-03 08:43:56
【问题描述】:

我已经使用这个代码好几个月了,它对我来说工作得很好,但现在我收到了这个错误:Object reference not set to an instance of an object. 在这行代码:

Dim Page_Most_Recent_Quarter As Date = document.DocumentNode.SelectSingleNode("//*[@id='financials-iframe-wrap']/div/table//tr[2]/th[3]").InnerText

这里是完整的代码:

Dim wreq As HttpWebRequest = WebRequest.Create("http://www.nasdaq.com/symbol/GOOG/financials?query=income-statement&data=quarterly")
    wreq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5"
    wreq.Method = "get"
    Dim prox As IWebProxy = wreq.Proxy
    prox.Credentials = CredentialCache.DefaultCredentials
    Dim document As New HtmlAgilityPack.HtmlDocument
    Dim web As New HtmlAgilityPack.HtmlWeb
    web.UseCookies = True
    web.PreRequest = New HtmlAgilityPack.HtmlWeb.PreRequestHandler(AddressOf onPreReq)
    wreq.CookieContainer = cookies
    Dim res As HttpWebResponse = wreq.GetResponse()
    document.Load(res.GetResponseStream, True)
    Dim Page_Most_Recent_Quarter As Date = document.DocumentNode.SelectSingleNode("//*[@id='financials-iframe-wrap']/div/table//tr[2]/th[3]").InnerText

我认为没有任何更改会影响此代码。我无法弄清楚出了什么问题。

【问题讨论】:

    标签: vb.net html-parsing html-agility-pack selectsinglenode


    【解决方案1】:

    我猜该节点不存在或已被重命名。这是一个公共网站,会随时更改他们的内容。因为它没有找到它,所以它是 NOTHING,你不能在 nothing 上执行 .InnerText

    尝试将document.DocumentNode.SelectSingleNode("//*[@id='financials-iframe-wrap']/div/table//tr[2]/th[3]") 放入另一个变量并在调试时检查它。

    【讨论】:

    • 当我调试 document.DocumentNode.SelectSingleNode("//*[@id='financials-iframe-wrap']/div/table//tr[2]/th[3]") 它返回为空白。我很困惑,因为当您查看网页时,节点仍然存在,我相信我的语法正确。
    • 我确实查看了结果页面的 HTML,它看起来确实不错,但我不是敏捷包方面的专家。您可能想问这个问题,将生成的 HTML 作为特定于该问题的另一个问题。您提供的信息(例如 HTML)越多,您就越有可能让别人看到它。
    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 2012-08-31
    • 2011-11-21
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多