首先说明wps js宏还没有调用Win系统组件的方法,这里用shell函数调用cmd命令来执行nodejs https模块相关代码,需要安装node.js,并且对node.js、npm有一定了解。 以B站评论为例,获取回复我的数据 核心思路一、wps js宏可通过Shell函数调用cmd命令执行nodejs(Python同理)向cmd传递参数时,注意转义双引号,利用正则替换即可replace(/\"/g, '"""') //打开cmd并显示nodejs版本号,注意要安装nodejs,不然cmd报错 Shell('cmd /k node -v', jsNormalNoFocus) 二、nodejs从cmd命令行获取参数const args = process.argv //返回数组类型 三、nodejs https模拟cookie信息绕过网站的登录验证
const https = require('https') const options = { url: 'url' //请求链接 , method: 'GET' //请求方式 , headers: { //请求头 'accept': 'accept' , 'cookie': 'cookie' , 'origin': 'origin' , 'referer': 'referer' , 'user-agent': 'user-agent' } } const req = https.request(options.url, options, res => { let buf = '' res.on('data', d => buf += d) //Stream 流,合并 res.on('end', () => console.log(buf)) //接收完成 }) req.on('error', error => console.error(error)) req.end() 四、nodejs环境下导出Excel文件需要用到exceljs包安装exceljs npm i exceljs const ExcelJS = require('exceljs') //导入exceljs包 const workbook = new ExcelJS.Workbook() //创建工作簿对象 const sheet = workbook.addWorksheet('Sheet1') //创建工作表对象 const arr = [[1,2,3], [4,5,6], [7,8,9]] const fileName = 'D\\test.csv' sheet.addRows(arr) //写入二维数组 workbook.csv.writeFile(fileName) //导出csv文件 方法/步骤一、安装node.js
二、准备文件
三、test.js代码const https = require('https') //导入nodejs https模块 const ExcelJS = require('exceljs') //导入exceljs包 const args = process.argv //获取cmd命令行参数,返回一个数组 const last = args.length - 1 const opt = JSON.parse(args[last]) //因为传递的参数是JSON字符串,所以这里转换为js可操作的数组对象 getJSON(opt.url, opt, data => { const obj = JSON.parse(data) const list = obj.data.items const arr = list.map(item => { return [ item.user.avatar + '@46w_46h_1c.webp' //回复人头像链接 , item.user.nickname //回复人 , item.item.source_content //回复内容 , item.item.root_reply_content //被回复的评论 , item.item.title //我的评论 , item.item.uri //原视频链接 ] }) arr.unshift(['回复人头像链接', '回复人', '回复内容', '被回复的评论', '我的评论', '原视频链接']) const workbook = new ExcelJS.Workbook() //新建工作簿 const sheet = workbook.addWorksheet('回复我的') //新建工作表 sheet.addRows(arr) //写入数据 workbook.csv.writeFile(opt.fileName) //导出为csv文件 console.log('获取成功') }) function getJSON(url, options, callback) { //nodejs官网给的方法:https.request(url[, options][, callback]) const req = https.request(url, options, res => { let buf = '' res.on('data', d => buf += d) //Stream(流),大多数是一份一份传过来的,这里直接合并 res.on('end', () => { //流传输完成的操作 //fs.writeFile(opt.fileName, buf.toString(), err => console.log(err || 'done')) //写入文件 callback(buf.toString()) //回调函数 }) }) req.on('error', error => console.error(error)) //错误处理 req.end() //结束请求 } 四、利用浏览器的开发工具获取请求头信息通过浏览器开发工具获取请求头信息,快捷键一般是F12 请求url(request url)、method、accept、cookie、origin、referer、user-agent等会写wps js宏代码要用,网抓数据一般拿这几个参数就够了 五、wps js宏编写代码function test(){ //设置请求信息 const options = { url: 'url' //请求url(request url) , method: 'GET' //method,必须大写 , fileName: 'D:\\test.csv' //获取到的数据保存路径 , headers: { //设置请求头,一般设置这个都能绕过服务器登录验证 'accept': 'accept' //accept , 'origin': 'origin' //origin , 'referer': 'referer' //referer , 'user-agent': 'user-agent' //user-agent , 'cookie': 'cookie' //cookie } } let arg = JSON.stringify(options) //把配置信息转为JSON字符串,向cmd传递参数 arg = arg.replace(/\"/g, '"""') //在cmd需要转义双引号 //nodejs执行的文件,根据自己的文件路径更改,照搬我的一定会报错 let nodeJsFile = 'C:\\Users\\Sam\\Desktop\\test\\test.js' let order = nodeJsFile + ' ' + arg //设置cmd命令行参数,参数之间用空格隔开 Shell('cmd /k node ' + order, jsNormalNoFocus) //Shell('cmd /c node ' + order, jsHide) //隐藏cmd窗口,执行完成后关闭自动窗口 } |
|
来自: yuxinrong > 《WPSJSA宏编程(JS)》