用Electron写个带界面的nodejs爬虫的实现方法(2)

const ipcMain = electron.ipcMain; ipcMain.on('notice', (e, msg) => { switch (msg) { case 'getcodeCookie': mainWindow.webContents.send('codeCookie',codeCookie) break default: break } })

打开调试控制台 可以看到输出

index.js

const electron = require('electron'); const ipcRenderer = electron.ipcRenderer; // 获取控件 let btn_submit = document.getElementById("btn_submit"); btn_submit.addEventListener('click', (e) => { ipcRenderer.send('notice', 'getcodeCookie'); }); // 监听 codeCookie ipcRenderer.on('codeCookie', (e, msg) => { codeCookie = msg; console.log('接受主进程发送的codeCookie: '+codeCookie); });

运行一下, 点击登录按钮

就可以在调试控制台看到 codeCookie

模拟登录

我们需要登录后台,获取登录后cookie这样才方便我们操作。

编辑index.js

const electron = require('electron'); const ipcRenderer = electron.ipcRenderer; const path = require('path'); const superagent = require('superagent'); // 链接 const urls = { loginUrl: "登录的地址", codeUrl: "验证码地址", targetUrl: "后台的地址" }; // 头信息 const browserMsg = { "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36", 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }; // 验证码cookie var codeCookie; // 登录后的cookie var tokenCookie; // 获取控件 const btn_submit = document.getElementById("btn_submit"); const btn_refresh = document.getElementById("btn_refresh"); const input_name = document.getElementById("input_name"); const input_pass = document.getElementById("input_pass"); const input_code = document.getElementById("input_code"); // 登录按钮 点击事件 btn_submit.addEventListener('click', (e) => { ipcRenderer.send('notice', 'getcodeCookie'); // 获取输入文本 var name = input_name.value; var pass = input_pass.value; var code = input_check.value; // 校验输入 if (name == "" || pass == "" || code == "") { alert("请输入"); } else { // 校验通过 开始进行登录操作 superagent .post(urls.loginUrl) .set('Cookie', codeCookie) .set(browserMsg) // 避免登录后的302重定向 .redirects(0) .send({ 'LoginForm[username]': name }).send({ 'LoginForm[password]': pass }).send({ logincode: code }).send({ jz: '0' }).end((err, res) => { // 登录成功 获取tokenCookie // 获取tokenCookie tokenCookie = res.header['set-cookie']; superagent .get(urls.targetUrl) .set('Cookie',tokenCookie) .set(browserMsg) .end((err,res)=>{ // 成功进入后台 console.log(res.text); }) }); } }); btn_refresh.addEventListener('click', (e) => { }); ipcRenderer.on('codeCookie', (e, msg) => { codeCookie = msg; console.log('接受主进程发送的codeCookie: ' + codeCookie); });

这里只是演示一下代码怎么写,具体不一定那么顺利的拿到tokenCookie。具体情况具体分析。

关键是请求要带上cookie

数据抓取

成功进入到后台了,就要抓取需要的数据了。这里就需要 cheerio 工具了

cheerio https://cheerio.js.org/

可以理解是node上jq , 操作基本跟jq是一样的。

操作还是很简单的。

要注意的是nodejs是异步的,就连for也是异步的。

有时候要等待请求完成的话,就要用上 async 了。

导出xlsx表格

爬虫基本完成了,怎么导出数据就随意了。

如果是要生成xls表格,一般是用excel-export 简单够用

我这里推荐 另一个 better-xlsx 。

这里演示一下 , 怎么调用系统的保存对话框,保存文件。

编辑 index.js

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f1c96723389c2d1e238149dab1701bac.html