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

使用Node命令行注入Gremlins.js代码时遭遇document未定义错误

解决Node命令行注入gremlins.js时出现的ReferenceError: document is not defined错误

嘿,这个问题其实很典型——你混淆了浏览器端脚本和Node.js服务器端环境的运行差异啦!

为什么会报错?

  • 你写的这段代码是专门给浏览器用的书签脚本(bookmarklet),它依赖浏览器提供的document、window这类DOM API来操作网页。但Node.js是服务器端运行环境,根本没有这些浏览器专属的对象,直接在Node命令行跑肯定会抛出ReferenceError。
  • 再补充下:gremlins.js本身就是为浏览器设计的工具,用来模拟用户随机操作(点击、输入、滚动等)测试网页稳定性,它的运行前提必须是存在完整的浏览器DOM环境。

正确的使用方式

方式一:直接在浏览器里用(最简便)

把这段代码复制到浏览器的书签地址栏,或者创建一个新书签,把代码粘贴到书签的「URL」字段里。之后打开你要测试的网页,点击这个书签,就能自动加载gremlins.js并在当前网页上运行测试了。

方式二:用无头浏览器在Node环境中自动化运行

如果想在Node环境里自动化测试网页,可以借助无头浏览器工具(比如Puppeteer、Playwright)来模拟浏览器环境,再注入你的脚本。这里给你一个Puppeteer的示例:

const puppeteer = require('puppeteer');

(async () => {
  // 启动无头浏览器,设为false可以看到浏览器窗口
  const browser = await puppeteer.launch({ headless: false }); 
  const page = await browser.newPage();
  // 打开你要测试的目标网页
  await page.goto('https://your-target-page.com');
  
  // 在浏览器页面中注入并运行gremlins脚本
  await page.evaluate(() => {
    function callback(){gremlins.createHorde().unleash()} 
    var s=document.createElement("script");
    s.src="https://rawgithub.com/marmelab/gremlins.js/master/gremlins.min.js";
    if(s.addEventListener){
      s.addEventListener("load",callback,false)
    }else if(s.readyState){
      s.onreadystatechange=callback
    }
    document.body.appendChild(s);
  });

  // 等待10秒让gremlins完成测试,时间可以按需调整
  await new Promise(resolve => setTimeout(resolve, 10000));
  
  // 关闭浏览器
  await browser.close();
})();

运行前记得先安装Puppeteer:npm install puppeteer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:10:10