nightmare.js - $ 未定义
nightmare.js - $ not defined
我想在 nightmare.js
的网页抓取中使用 jquery
。基于 this tutorial,我可以 inject
和 jquery
并将文件复制到同一个根文件夹。但不知何故我仍然得到错误:
ReferenceError: $ is not defined
下面是我的代码:
var Nightmare = require('nightmare');
new Nightmare()
.goto('http://google.com')
.inject('js', 'jquery.min.js')
.wait()
.run(function(err, nightmare) {
if (err) {
console.log(err);
};
var items = [];
$('.someclass').each(function(){//<-- error - $ not defined
item = {};
item.value = $(this).val();
items.push(item);
});
console.log(items);
});
为了能够与页面及其变量交互,您需要使用 .evaluate(fn)
:
Invokes fn
on the page with arg1, arg2,...
.
.evaluate()
将 fn
的上下文更改为页面的上下文,这样它就可以像客户端代码一样执行,可以访问 window
, document
、$
和任何其他全局变量。
此外,由于您提到使用 2.10 版,1.x 版本中的 .run()
函数已被 Promise
s 取代,因此您需要使用 [=21] =] 和 .catch()
分别处理成功和错误。
对于您的代码段:
new Nightmare()
.goto('http://google.com')
.inject('js', 'jquery.min.js')
.wait()
.evaluate(function() {
var items = [];
$('.someclass').each(function(){
item = {};
item.value = $(this).val();
items.push(item);
});
console.log(items);
})
.then(function () {
console.log('Done');
});
.catch(function (err) {
console.log('Error', err);
});
该项目的自述文件包括 a few examples of this method chain。
我想在 nightmare.js
的网页抓取中使用 jquery
。基于 this tutorial,我可以 inject
和 jquery
并将文件复制到同一个根文件夹。但不知何故我仍然得到错误:
ReferenceError: $ is not defined
下面是我的代码:
var Nightmare = require('nightmare');
new Nightmare()
.goto('http://google.com')
.inject('js', 'jquery.min.js')
.wait()
.run(function(err, nightmare) {
if (err) {
console.log(err);
};
var items = [];
$('.someclass').each(function(){//<-- error - $ not defined
item = {};
item.value = $(this).val();
items.push(item);
});
console.log(items);
});
为了能够与页面及其变量交互,您需要使用 .evaluate(fn)
:
Invokes
fn
on the page witharg1, arg2,...
.
.evaluate()
将 fn
的上下文更改为页面的上下文,这样它就可以像客户端代码一样执行,可以访问 window
, document
、$
和任何其他全局变量。
此外,由于您提到使用 2.10 版,1.x 版本中的 .run()
函数已被 Promise
s 取代,因此您需要使用 [=21] =] 和 .catch()
分别处理成功和错误。
对于您的代码段:
new Nightmare()
.goto('http://google.com')
.inject('js', 'jquery.min.js')
.wait()
.evaluate(function() {
var items = [];
$('.someclass').each(function(){
item = {};
item.value = $(this).val();
items.push(item);
});
console.log(items);
})
.then(function () {
console.log('Done');
});
.catch(function (err) {
console.log('Error', err);
});
该项目的自述文件包括 a few examples of this method chain。