全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 4704|回复: 12

[疑问] 我也来发个自动签到脚本,nodejs版

[复制链接]
发表于 2018-5-31 21:06:07 | 显示全部楼层 |阅读模式
package.json 文件

  1. {
  2.   "dependencies": {
  3.     "cheerio": "^1.0.0-rc.2",
  4.     "node-schedule": "^1.3.0",
  5.     "superagent": "^3.8.3"
  6.   }
  7. }
复制代码


使用 npm i 安装依赖

app.js,替换成你的用户名密码,运行 node app ,也可以装个 forever 放在后台运行
  1. const superagent = require('superagent');
  2. const schedule   = require('node-schedule');
  3. const cheerio    = require('cheerio')

  4. const login = user=>
  5.     new Promise((resolve,reject)=>{
  6.         superagent
  7.         .post('http://www.hostloc.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1')
  8.                 .type('form')
  9.                 .send(user)
  10.                 .set('Host','www.hostloc.com')
  11.             .set('Referer','http://www.hostloc.com/forum.php')
  12.         .set('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3391.0 Safari/537.36')
  13.         .end((err, result)=> {
  14.                 if(err){
  15.                         reject(err)
  16.                         return;
  17.                 }

  18.                 if(result.text.includes('登录失败')){
  19.                         reject(err)
  20.                 }else{
  21.                         if(result.header['set-cookie']){
  22.                                 let cookie = result.header['set-cookie'].map(item=>{
  23.                                         return item.split(';')[0] + '; '
  24.                                 }).reduce((pre,item)=>{
  25.                                         return pre + item
  26.                                 })

  27.                                 resolve( cookie )
  28.                             }
  29.                 }
  30.         })
  31.     })

  32. const visited = (Cookies, uid)=>
  33.     new Promise((resolve,reject)=>{
  34.         superagent
  35.         .get(`http://www.hostloc.com/space-uid-${uid}.html`)
  36.             .set('Host','www.hostloc.com')
  37.         .set('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3391.0 Safari/537.36')
  38.             .set('Cookie',Cookies)
  39.         .end((err, result)=> {
  40.                 if(err){
  41.                         reject(err)
  42.                         return;
  43.                     }
  44.                     resolve(result.text)
  45.         })
  46.     })

  47. const getCredit = Cookies=>
  48.     new Promise(function(resolve,reject){
  49.         superagent
  50.         .get('http://www.hostloc.com/forum.php')
  51.             .set('Host','www.hostloc.com')
  52.         .set('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3391.0 Safari/537.36')
  53.             .set('Cookie',Cookies)
  54.         .end((err, result)=> {
  55.                 if(err){
  56.                         reject(err)
  57.                         return;
  58.                     }

  59.                     let $ = cheerio.load(result.text)
  60.             resolve( $('#extcreditmenu').html().split(': ')[1] )
  61.         })
  62.     })

  63. const randUid = ()=> Math.floor(Math.random()*(29796-20000)+20000);

  64. (async () => {
  65.         const user = {
  66.                 username:'username',
  67.                 password:'password'
  68.         }
  69.        
  70.         async function start(user){
  71.                 const cookie = await login(user)

  72.                 console.log(`积分:${await getCredit(cookie)}`)

  73.                 let uid = randUid()
  74.                 let max = uid + 10

  75.                 while(uid<max){
  76.                         console.log(uid)
  77.                         await visited(cookie, uid)
  78.                         uid++
  79.                 }

  80.                 let credit = await getCredit(cookie)
  81.                 console.log(`done,积分:${credit}`)

  82.                 return credit
  83.         }

  84.         // *    *    *    *    *    *
  85.         // ┬    ┬    ┬    ┬    ┬    ┬
  86.         // │    │    │    │    │    |
  87.         // │    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
  88.         // │    │    │    │    └───── month (1 - 12)
  89.         // │    │    │    └────────── day of month (1 - 31)
  90.         // │    │    └─────────────── hour (0 - 23)
  91.         // │    └──────────────────── minute (0 - 59)
  92.         // └───────────────────────── second (0 - 59, OPTIONAL)
  93.         schedule.scheduleJob('* * 8 * * *', function() {
  94.             start(user)
  95.         });
  96. })();
复制代码
发表于 2018-5-31 21:08:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2018-5-31 21:09:33 | 显示全部楼层
搬个小凳学习一下
发表于 2018-5-31 21:20:38 | 显示全部楼层
大佬666,支持一个~
发表于 2018-5-31 21:38:29 | 显示全部楼层
要不用nexe 打包吧,账号密码从文件读取,

连依赖安装都省了
发表于 2018-5-31 21:42:28 | 显示全部楼层
哪位大佬来个go语言的二进制文件吧。
发表于 2018-5-31 21:43:33 | 显示全部楼层
额, 世界上最好的语言为什么没人写.
发表于 2018-5-31 21:44:25 | 显示全部楼层
Mark 一下。。话说有没有java大佬写个java的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-3-29 22:35 , Processed in 0.066202 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表