我正在尝试使用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/

10-13 02:00