You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已安装Nightmare仍提示未定义?Node.js/Electron问题求助

问题排查与修正方案

嘿,作为Node.js新手遇到这种错误很正常,我帮你一步步拆解问题:

1. 最直接的错误:变量名大小写不匹配

你导入Nightmare的时候用的是小写变量名:

var nightmare = require('nightmare')

但实例化的时候却用了大写的Nightmare:

var nightmare = Nightmare({ show: true });

Node.js对变量名大小写是严格区分的,所以会抛出ReferenceError: Nightmare is not defined的错误,这是当前的核心问题。

2. Node.js环境误用浏览器端API

你写了$( "#test" ).addEventListener('click',() => { ... }),这里有两个问题:

  • jQuery绑定事件的正确写法是.on('click', 回调),不是addEventListener(这是原生DOM元素的方法);
  • 更关键的是:Node.js是服务端/本地运行环境,没有浏览器的DOM环境,你不能直接在Node.js代码里监听HTML页面的元素点击事件。如果你的需求是触发Nightmare的操作,应该直接执行Nightmare的流程,不需要绑定点击事件(这是新手常见的前后端代码混写误区)。

3. 其他语法/拼写错误

  • 错误的方法名:把.catch写成了.cat,这会导致捕获不到Promise的错误;
  • 输入框类型错误:type('input[type=test]')里的type=test应该是type=text,HTML里没有test类型的输入框;
  • 代码缺少分号:虽然JS允许自动分号,但规范写法能避免很多潜在问题。

修正后的代码示例

var nightmare = require('nightmare');
// 移除无用的jQuery导入,Node.js环境不需要它
var nightmareInstance = nightmare({ show: true });

// 直接执行Nightmare流程,无需绑定页面点击事件
nightmareInstance
  .goto('http://akhiljose.me/master/paste/')
  .type('.form-control', 'Test')
  .type('input[type=text]', 'nightmare_test') // 修正输入框类型
  .click('input[type=submit]')
  .wait(7000)
  .evaluate(function () {
    return document.querySelector('pre').innerText;
  })
  .end()
  .then(function (result) {
    console.log(result);
  })
  .catch(function (error) { // 修正为catch方法
    console.error('Search failed:', error);
  });

如果你的需求是在浏览器页面点击按钮后触发Node.js的Nightmare操作,那需要用Electron或者搭建简单的HTTP服务来实现前后端通信,这是另一种场景,如果你是这个需求可以再补充说明~

内容的提问来源于stack exchange,提问作者Ogden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:31:35