我正在尝试使用jsdom.env
函数抓取页面的某些信息。但是,在env()
回调中返回的页面是关于如何拒绝对服务器的访问,而不是关于在浏览器中加载相同URL时希望看到的内容。
因此,浏览器加载页面和jsdom加载页面的方式似乎有所不同。这可以在jsdom
模块中配置吗?
编辑:
范例网址:http://www.bestbuy.com/site/HP+-+20%22+Widescreen+Flat-Panel+LCD+Monitor/1422209.p?id=1218257754431&skuId=1422209
更新:
问题是jsdom没有指定用户代理http标头。看下面的详细答案
最佳答案
问题是jsdom
没有指定bestbuy.com服务器正在检查的“ User-Agent” http标头。如果为空,则拒绝访问。当前,无法通过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)
});
关于javascript - 在JSDOM中加载URL时出现“访问被拒绝”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8675233/