我正在尝试从此page访问公司名称。
应该返回一个带有“Cascade corporation”的innertext的节点,但是我得到了null。
HtmlNode htest = document.DocumentNode.SelectSingleNode("//*[@id='appbar']/div/div[2]/div[1]/span");
我错过了什么?
P.S。必须使用Chrome
答案 0 :(得分:3)
我试图在我的机器上重现您的问题。我抓住了请求&使用Fiddler的响应数据。我很惊讶地注意到浏览器的渲染html输出与我的代码不同。
来自Fiddler,我注意到的差异是用户代理值。后来我想出了这个代码,它对我有用。你可以试试看,让我知道。请不要投票给我。我正在努力帮助你...
string url = "http://www.google.com/finance?q=NASDAQ:TXN&fstype=ii";
HtmlWeb web = new HtmlWeb();
web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0"; // latest firefox
HtmlDocument doc = web.Load(url);
var node = doc.DocumentNode.SelectSingleNode("//*[@id='appbar']/div/div[2]/div[1]/span")
//var node = doc.DocumentNode.SelectSingleNode("//div[@class='appbar-snippet-primary']/span")
当我评论用户代理行时,我能够重现您的问题。希望它有所帮助。
答案 1 :(得分:0)
在您要链接的页面上没有标识为appbar
的元素,只有一个div有一个名为appbar-hide
的类,这是源代码中唯一存在的appbar。
当遇到这样的问题时,尝试一步一步的方法。首先选择xpath中的第一个节点,即以HtmlNode htest = document.DocumentNode.SelectSingleNode("//*[@id='appbar']");
开头,然后返回null(在这种情况下,将会发现错误的位置)。然后纠正错误,如果您确信其余的都没问题,请再次尝试完整的xpath。如果再次出现错误,请将其恢复到第二个元素即。 //*[@id='appbar']/div
和这样的进步,直到你得到你想要的元素