前言
不甘心啊,还是没有到彻底的解放双手,只完成了发布帖子部分,那咋办嘛,那就只能再写个脚本来进行下一步操作了
自动发豆脚本的编写
其实整体逻辑理顺之后,问题也没多少,无外乎获取到帖子的url,获取到帖子的楼层数,触发发豆提交请求三部分
获取帖子Url
首先是定义了全局变量整个分区的url用作抓取url
关键代码如下
let rePage = /<a href="\?.+?(\d+).+?(\d+).+?>\[.+(\d{4}-\d{2}-\d{2}\])/gm // 这里是抓取全文匹配到该页面所有签到帖
let arrCheckinLink = res.text.match(rePage) // 存放所有签到帖的数组
let datetime = dayjs().format('YYYY-MM-DD') // 当天的日期 用以匹配帖子标题
let patt = new RegExp(datetime) // reg化
let arrPatt = arrCheckinLink.map(val => patt.test(val)) // 模式匹配后的数组
let d = arrPatt.indexOf(true) // 找到正确的url索引
let reUrl = /<a href="\?.+?(\d+).+?(\d+).+?>\[.+(\d{4}-\d{2}-\d{2}\])/
topicId = arrCheckinLink[d].match(reUrl)[2] // 取出正确的帖子id
获取楼层个数
这部分的正则为什么这么写呢,之前爬取全文后分析发现去重的楼层数是直接写入页面的,所以基于正则拿到了这部分内容
/**
* @description 获取发豆机所需楼层个数
* @param {string} idUrl 所需的帖子url
* @returns
*/
function getNumOfRe(idUrl) {
return superagent
.get(idUrl) // 这里需要基于发布获取链接分析url
.set({
'Cookie': cookie
})
.then(res => {
let reCount = /(document.getElementById\(\"numofpost\"\)\.value.{4})(\d+)/
count = res.text.match(reCount)[2] // 这里基于正则从全文获取到 应该发豆的楼层个数
})
.catch(err => {
console.log(err)
})
}
发豆提交
这部分就是构造json然后基于type('form')
进行提交
function setBonus(count, topicId) {
const jsonstr = {
geshu: count, // 发豆楼层 待获取 done
unrepeat: 'on',
jine: '100', // 发豆个数 一般100 发豆机
rewardtype: 'normal',
topicid: topicId
}
return superagent
.post('https://nanyangpt.com/easyreward.php')
.set({
'Cookie': cookie
})
.type('form')
.send(jsonstr)
}
基于定时器的自动执行
设置了
setInterval
,1000
用于每秒进行探测,然后在定时器内部设定了获取时间用于if
判断,到达对应的时间段就触发内部代码(即发豆执行代码)
结语
解放双手2333,然鹅还差最后一步未能完成。事实上目前可以自动发帖,自动发豆,但是相对应的帖子高亮仍未分析完全,不是很懂同样的触发提交却得不到相同的结果。
待续...
版权属于:ajycc20
本文链接:https://ajycc20.top/archives/9.html
所有原创文章采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。