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

发布时间:2024-11-25 09:01

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


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}`)

执行结果:
\"image.png\"
注意:这里使用child_process.spawn()方法,由于笔者子进程运行的文件为js文件,因此直接用node运行,如果运行的是其他文件,比如笔者之前运行的×××.e2e.js文件时,笔者运行指令为npm test ×××.e2e.js,就需要写成如下:

  const workerProcess = child_process.spawn(\'npm.cmd\', [\'test\', \'./Request_Test/request.e2e.js\'], {
    });

因为在Windows上,当我们执行npm 时,我们实际执行的是npm. cnd批处理,所以一定要显示的执行npm.cmd否则会出现Error: spawn npm ENOENT的错误。
(未完)

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号