2011-12-30 30 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不指定用戶代理HTTP標頭。請看下面的詳細答案

回答

1

問題是jsdom沒有指定一個'用戶代理'http頭,bestbuy.com服務器正在檢查。如果它是空的,訪問被拒絕。目前,沒有通過jsdom指定此方式 - https://github.com/tmpvar/jsdom/issues/196

是爲我工作用request模塊來獲取網頁內容,然後再傳給jsdom工作的一種解決方法。該request模塊允許你指定一個用戶代理

例子:

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?我已經成功地在其他網站上使用jsdom。我只是試圖加載頁面,並使用jQuery的定位器 – Danish 2011-12-30 15:40:32

+1

遍歷它的問題原來是jsdom不發送用戶代理http頭。儘管感謝您的幫助! – Danish 2011-12-31 04:34:09