nightmare.js - $ 未定义

nightmare.js - $ not defined

我想在 nightmare.js 的网页抓取中使用 jquery。基于 this tutorial,我可以 injectjquery 并将文件复制到同一个根文件夹。但不知何故我仍然得到错误:

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 的上下文更改为页面的上下文,这样它就可以像客户端代码一样执行,可以访问 windowdocument$ 和任何其他全局变量。

此外,由于您提到使用 2.10 版,1.x 版本中的 .run() 函数已被 Promises 取代,因此您需要使用 [=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