分享

wps js宏模拟cookie绕过网站登录验证请求数据

 yuxinrong 2023-09-20

首先说明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信息绕过网站的登录验证
  • 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窗口,执行完成后关闭自动窗口
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多