在puppeteer中使用node.js创建子进程并使用WebSocket和Ipc实现进程间通信,从而实现数据的快速爬取

笔者近几月某公司WiFi测试平台项目中,了解到他们测试WiFi一直是人工手动测试,因此在老师提议下,决定采用puppeteer去实现页面数据的爬取和更改的自动化,在实施过程中,发现--路由管理页面--登陆后只有cookie加密,并且页面的数据和操作通过向同一接口传递不同参数实现,因此可以通过promise-request方法快速的实现上述功能。
本文主要记录、总结:

  • node.js子进程的创建:node.js:child_process(官方文档)
  • fork和spawn的区别与联系
  • Ipc实现进程间通信
  • WebSocket实现进程间通信
1. node.js子进程的创建
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}`)

执行结果:
在puppeteer中使用node.js创建子进程并使用WebSocket和Ipc实现进程间通信,从而实现数据的快速爬取
文章图片

注意:这里使用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的错误。
(未完)

    推荐阅读