2011-12-30 3 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은 bestbuy.com 서버가 확인하는 'User-Agent'http 헤더를 지정하지 않았습니다. 비어있는 경우 액세스가 거부됩니다. https://github.com/tmpvar/jsdom/issues/196

날은 페이지의 콘텐츠를 얻을 수있는 request 모듈을 사용하고 작업 할 jsdom에 다음 통과 근무 해결 방법 - 현재 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

관련 문제