Node环境下如何正确引入jQuery与JSDOM并解决相关报错?
解决jsdom
require(...).env is not a function 错误并正确配置jQuery + jsdom 嘿,我来帮你搞定这个问题~你遇到的require(...).env is not a function报错,核心原因是你安装的是新版本的jsdom,而env()方法早在jsdom v10版本就被废弃移除了,旧的API自然用不了啦!
下面给你两种正确的配置方案,看你的需求选就行:
方案一:在Node环境中单独模拟DOM使用jQuery
如果只是想在Node环境里模拟浏览器DOM环境,用jQuery做一些DOM操作,直接替换你原来的jsdom+jQuery相关代码为下面的内容:
var Nightmare = require('nightmare'); var nightmare = Nightmare({ show: true , height: 900}); // 引入jsdom的JSDOM类 const { JSDOM } = require("jsdom"); // 创建一个空的DOM环境 const domInstance = new JSDOM(''); // 获取模拟的window对象 const window = domInstance.window; // 把window传入jQuery,初始化$变量 var $ = require("jquery")(window); // 测试一下,比如创建一个div并输出文本 console.log($('<div>Hello jQuery!</div>').text()); // 会输出 Hello jQuery!
方案二:在Nightmare中直接注入jQuery(更实用的爬虫场景)
如果你是想结合Nightmare做页面爬取/自动化,需要在Nightmare控制的浏览器里用jQuery解析页面,其实完全不需要在Node环境单独配置jsdom——Nightmare可以直接把jQuery注入到目标页面里,这样用起来更顺手:
var Nightmare = require('nightmare'); var nightmare = Nightmare({ show: true , height: 900}); nightmare .goto('https://example.com') // 先访问你要操作的页面 // 把本地安装的jQuery注入到当前页面 .inject('js', require.resolve('jquery')) // 在页面的浏览器环境中执行jQuery代码 .evaluate(() => { // 这里的$就是页面里的jQuery,和浏览器里用的完全一样 return $('h1').text(); // 比如获取页面中h1标签的文本内容 }) .then(result => { console.log('页面标题文本:', result); }) .catch(error => { console.error('操作出错:', error); });
简单总结下:旧的jsdom.env()已经被淘汰了,新版本必须用JSDOM类来创建DOM环境;如果是和Nightmare配合使用,直接注入jQuery到页面是更优的方案哦~
内容的提问来源于stack exchange,提问作者pohzurrr
相关产品推荐
相关产品推荐

