前言

不甘心啊,还是没有到彻底的解放双手,只完成了发布帖子部分,那咋办嘛,那就只能再写个脚本来进行下一步操作了


自动发豆脚本的编写

其实整体逻辑理顺之后,问题也没多少,无外乎获取到帖子的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,然鹅还差最后一步未能完成。事实上目前可以自动发帖,自动发豆,但是相对应的帖子高亮仍未分析完全,不是很懂同样的触发提交却得不到相同的结果。

待续...

Last modification:June 11th, 2020 at 08:56 pm
如果觉得我的文章对你有用,请随意赞赏