首先说明wps js宏还没有调用Win系统组件的方法,这里用shell函数调用cmd命令来执行nodejs https模块相关代码,需要安装node.js,并且对node.js、npm有一定了解。
wps 2024版本已经支持 JavaScript Fetch API,不需要再通过nodejs这么麻烦了
以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信息绕过网站的登录验证
-
https.request(url[, options][, callback])
-
注意res.on('data')获得的是Stream流,需要合并
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
-
一直点击下一步安装即可,非常简单这里不细说,官网:nodejs.org
-
安装完成后,在键盘按下win + r键,输入cmd打开命令行窗口,在命令行窗口输入node -v,然后按下enter(回车键),如果能正常显示版本号则安装正常
二、准备文件
-
新建一个文件夹test,用vscode打开
-
新建终端,输入npm i exceljs安装exceljs包
-
新建test.js文件编辑代码
-
等会在wps js宏编辑器写代码需要test.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窗口,执行完成后关闭自动窗口
}