2

我正在尝试从此页面访问公司名称。

应该返回一个带有“级联公司”内部文本的节点,但是我得到了 null 。

HtmlNode htest = document.DocumentNode.SelectSingleNode("//*[@id='appbar']/div/div[2]/div[1]/span");

我错过了什么?

PS 必须与 Chrome 一起使用

4

2 回答 2

3

I tried to reproduce your issue on my machine. I captured request & response data using Fiddler. I was surprised to notice that rendered html output from browser is different from my code.

From Fiddler the difference I noticed is the user agent value. Later I came up with this code and it works for me. Can you please try it and let me know. Please don't down vote me. I'm trying to help you ya..

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")

When I comment user agent line I am able to reproduce your issue. Hope it helps.

于 2012-06-12T10:23:55.920 回答
0

在您链接到的页面上,没有带有 id 的元素,appbar只有一个带有类的 div,appbar-hide这是源中唯一存在 appbar 的地方。

当遇到这样的问题时,请尝试一步一步的方法。首先选择 xpath 中的第一个节点,即从它开始,HtmlNode htest = document.DocumentNode.SelectSingleNode("//*[@id='appbar']");它返回 null (在这种情况下,它将)你已经找到了错误所在。然后更正错误,如果您确信其余部分正常,请再次尝试完整的 xpath。如果您再次遇到错误,请将其返回到第二个元素,即。//*[@id='appbar']/div像这样进步,直到你得到你想要的元素

于 2012-06-12T09:09:53.023 回答