2011-12-30 9 views
2

jsdom.env機能を使用してページの情報を削り取ろうとしています。しかし、env()コールバックで返されるページは、ブラウザに同じURLをロードするときに見たいコンテンツの代わりに、サーバーへのアクセスがどのように拒否されるかについてです。JSDOMでURLを読み込むときに「アクセスが拒否されました」

したがって、ブラウザがページを読み込む方法とjsdomが読み込む方法に違いがあるようです。これはjsdomモジュールで設定できるものですか?

編集:

例URL:http://www.bestbuy.com/site/HP+-+20%22+Widescreen+Flat-Panel+LCD+Monitor/1422209.p?id=1218257754431&skuId=1422209

更新:

問題がjsdom user-agent HTTPヘッダーを指定していませんでした。以下の詳細な解答をご覧ください

答えて

1

jsdomは、bestbuy.comサーバーが確認している「ユーザーエージェント」のHTTPヘッダーを指定していないという問題がありました。空の場合、アクセスは拒否されます。 https://github.com/tmpvar/jsdom/issues/196

ページのコンテンツを取得してから作業するjsdomの上で、次に渡すrequestモジュールを使用するように私のために働いた回避策を - 現在、jsdomを介してこれを指定する方法はありません。

var request = require('request'), 

getPage = function(someUri, callback) { 
    request({uri: someUri, headers:{'User-Agent': 'Mozilla/5.0'}}, function (error, response, body) { 
    console.log("Fetched " +someUri+ " OK!"); 
    callback(body); 
    }); 
} 

getPage('http://www.bestbuy.com/', function(body) { 
    console.log(body) 
}); 
0

デフォルトでは、クロスドメインAJAX呼び出しはできません。 詳細情報はhttp://m.snook.ca/archives/javascript/cross_domain_aj

+0

これはクロスドメインAJAXと考えられている方法:requestモジュールを使用すると、ユーザエージェント

例を指定することができますか?他のサイトでjsdomを正常に使用できました。私は単純にページをロードし、jqueryロケータを使ってそれをトラバースしようとしています – Danish

+1

問題は、ユーザーエージェントのhttpヘッダーを送信しないjsdomであることが判明しました。あなたの助けをありがとう! – Danish

関連する問題