在puppeteer中使用node.js创建子进程并使用WebSocket和Ipc实现进程间通信,从而实现数据的快速爬取
笔者近几月某公司WiFi测试平台项目中,了解到他们测试WiFi一直是人工手动测试,因此在老师提议下,决定采用puppeteer去实现页面数据的爬取和更改的自动化,在实施过程中,发现--路由管理页面--登陆后只有cookie加密,并且页面的数据和操作通过向同一接口传递不同参数实现,因此可以通过promise-request方法快速的实现上述功能。
本文主要记录、总结:
- node.js子进程的创建:node.js:child_process(官方文档)
- fork和spawn的区别与联系
- Ipc实现进程间通信
- WebSocket实现进程间通信
node创建子进程的方法可以参考上述官方文档,里面有详细的配置和说明。在本文中,笔者着重介绍笔者使用到的
child_process.spawn()
方法和child_process.fork()
方法。Master进程代码:
const child_process = require('child_process');
//引入child_process模块
const {recLog} = require("./utils/log");
//由于执行父进程,子进程无法在控制台打印信息,因此封装了log4js方法。const gChildProcessNumber = 3;
//创建子进程数量-全局
creatProcess();
async function creatProcess() {
for (let i = 0;
i < gChildProcessNumber;
i += 1) {
const workerProcess = child_process.spawn('node', ['./Request_Test/ChildProcess.js']);
}
}
Child进程代码:
const {recLog} = require("./utils/log");
recLog(`子进程创建成功,执行ChildProcess.js文件,进程pid为:${process.pid}`)
执行结果:
文章图片
注意:这里使用
child_process.spawn()
方法,由于笔者子进程运行的文件为js文件,因此直接用node运行,如果运行的是其他文件,比如笔者之前运行的×××.e2e.js文件时,笔者运行指令为npm test ×××.e2e.js,就需要写成如下:const workerProcess = child_process.spawn('npm.cmd', ['test', './Request_Test/request.e2e.js'], {
});
【在puppeteer中使用node.js创建子进程并使用WebSocket和Ipc实现进程间通信,从而实现数据的快速爬取】因为在Windows上,当我们执行npm 时,我们实际执行的是npm. cnd批处理,所以一定要显示的执行npm.cmd否则会出现
Error: spawn npm ENOENT
的错误。(未完)
推荐阅读
- 在lc被欺负的这些年|【五月集训】—— 汇聚星球,算法锤炼,集中一点,登峰造极
- 数据库|《程序员2010精华本》china-pub预定中
- jenkins调优——实战
- 16. sed命令
- WordPress从购物车小部件中删除结帐按钮
- WordPress自定义主题未出现在仪表板中
- WordPress自定义logo未在所有页面上显示
- 每个用户的WordPress自定义链接
- 详解Java中方法重写和方法重载的6个区别
- Python实现解千千音乐网站中的JS加密算法