2

このページから会社名にアクセスしようとしています。

「Cascade Corporation」の内部テキストを持つノードを返す必要がありますが、代わりに null が返されます。

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

私は何が欠けていますか?

PS は Chrome で動作する必要があります

4

2 に答える 2

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

ユーザー エージェントの行にコメントすると、問題を再現できます。それが役に立てば幸い。

于 2012-06-12T10:23:55.920 に答える
0

リンク先のページには、id を持つ要素はありませんappbar。クラスが呼び出された div のみがありappbar-hide、それがソースに appbar が存在する唯一の場所です。

このような問題に直面したときは、段階的なアプローチを試してください。最初に xpath の最初のノードを選択します。つまり、最初HtmlNode htest = document.DocumentNode.SelectSingleNode("//*[@id='appbar']");に null を返すノード (この場合はこれになります) を選択し、エラーの場所を見つけます。次に、エラーを修正し、残りが問題ないと確信できる場合は、完全な xpath を再試行します。その後、再度エラーが発生した場合は、2 番目の要素に戻ります。//*[@id='appbar']/div必要な要素が得られるまで、このように進みます

于 2012-06-12T09:09:53.023 に答える