我想在jquery
的网页抓取中使用nightmare.js
。基于this tutorial,我可以inject
jquery
并将文件复制到同一个根文件夹。但不知怎的,我仍然得到错误:
ReferenceError:$未定义
以下是我的代码:
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);
});
答案 0 :(得分:3)
为了能够与页面及其变量进行交互,您需要使用.evaluate(fn)
:
使用
fn
在页面 上调用arg1, arg2,...
。
.evaluate()
将fn
的上下文更改为页面的上下文,以便它可以像客户端代码一样执行,并可以访问{{1} },window
,document
以及任何其他全局变量。
此外,由于您已经提到使用版本2.10,因此1.x版本中的$
功能已被Promise
s取代,因此您将要使用{{1 }和.run()
分别处理成功和错误。
对于您的代码段:
.then()
该项目的自述文件包括a few examples of this method chain。