2

我正在尝试使用该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 标头。看看下面的详细答案

4

2 回答 2

1

问题jsdom是没有指定 bestbuy.com 服务器正在检查的“用户代理”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)
});
于 2011-12-31T04:31:38.777 回答
0

默认情况下,跨域 AJAX 调用是不可能的。更多信息在这里: http: //m.snook.ca/archives/javascript/cross_domain_aj

于 2011-12-30T06:38:28.420 回答