前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【程序猿硬核科普】记录一次编写自动签到脚本的过程

【程序猿硬核科普】记录一次编写自动签到脚本的过程

作者头像
浩Coding
发布2020-03-04 14:12:21
2.8K0
发布2020-03-04 14:12:21
举报
文章被收录于专栏:浩Coding浩Coding
本篇文章主要记录一次编写自动签到Shell脚本的过程,文末附源码地址。

复制Cookie+CURL命令

最近有一个网站需要天天签到,显而易见的是手动签到太麻烦了,肯定是写脚本啊,偷了下懒,直接用Chrome审查元素找到“签到按钮”对应的方法,点击签到按钮后,切换到NetWork栏右键复制签到方法的CURL。

代码语言:javascript
复制
echo$(curl "http://f76c" -X POST -H "Connection: keep-alive" -H "Content-Length: 0" -H "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8" -H "Cookie: yunsuo_session_verify=yunsuo_session; uid=12234; email=haocoding^%^net; key=lasd9yfnq2n2u9823h5nad" --compressed --insecure) >> /test/autoCheckIn.log

再执行命令,OK签到成功,完美:

其实这样扔到Crontab中就行了,但是这不符合我的作风啊,每天都定点签到一分不差,万一网站有检测机制给我封号了呢,所以我们要设置随机时间签到,还要记录签到时间和结果,这才完美嘛。

实现随机时间签到

基本思路:

CRUL命令自动签到,记录签到结果到autoCheckIn.log。

②签到成功与否都要记录下签到时间,写入lastDate.log。

③根据lastDate.log取出上次签到的时间,加上($RANDOM%)随机函数生成下次签到时间

④根据下次签到时间生成Crontab命令并写入

⑤【视情况决定是否启用】备份Crontab命令,之后导入必需的Crontab命令,用>导入,用途是清空无用的每次签Crontab命令。

如果大家有不懂的地方可以看这篇文章,里面有这个Shell脚本的所有知识点:【程序猿硬核科普】Linux下Shell编程杂记

贴出源码:

代码语言:javascript
复制
#! /bin/sh

#先备份Crontab命令
crontab -l > /test/autoCheckIn/backCrontab/backCrontab-$(date +%Y-%m-%d).log
#之后导入必需的Crontab命令,用>导入,用途是清空无用的签到Crontab命令
cat /test/autoCheckIn/importantCrontab.log > /var/spool/cron/root

#本次签到时间写到lastDate.log中:2020-02-24 11:50
signDate=$(date +%Y-%m-%d)' '$(date +%H:%M)

#获取上次执行时间
lastDate=$(cat /test/autoCheckIn/lastDate.log)

#下次执行分钟:1~30
nextMinute=`expr $(($RANDOM%30)) + 1`
#下次执行小时:1~2
nextHour=`expr $(($RANDOM%2)) + 1`
#下次执行时间
nextDate=$(date -d "$lastDate 1 days")
nextDate=$(date -d "$nextDate $nextHour hour")
nextDate=$(date -d "$nextDate $nextMinute minute" +"%Y%m%d%H%M")
#echo '下次执行时间nextDate='$nextDate

#下次签到的年份
#signYear=${nextDate: 0: 4}
#下次签到的月份
signMonth=${nextDate: 4: 2}
#下次签到的日期
signDay=${nextDate: 6: 2}
#下次签到的小时
signHour=${nextDate: 8: 2}
#下次签到的分钟
signMinute=${nextDate: 10: 2}

#下次签到日志时间 *需要特殊处理,换成0-7是一样的意思
nextSignYear=$signMinute' '$signHour' '$signDay' '$signMonth' 0-7'
#echo 'nextSignYear='$nextSignYear

#表示当前登陆的用户
user=root
#Crontab命令路径相当于[crontab –e]
path=/var/spool/cron/
nextSignCrontab=' /test/autoCheckIn/autoCheckIn.sh'
#echo 'nextSignCrontab='$nextSignCrontab
#生成crontab 任务配置文件 >>是追加内容
echo $nextSignYear$nextSignCrontab >> $path$user

#签到失败结果
fail={"msg":"\u60a8\u4f3c\u4e4e\u5df2\u7ecf\u7b7e\u5230\u8fc7\u4e86...","ret":1}
#读取签到结果
tmpResult=$(curl "http://f76c" -X POST -H "Connection: keep-alive" -H "Content-Length: 0" -H "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8" -H "Cookie: yunsuo_session_verify=yunsuo_session; uid=12234; email=haocoding^%^net; key=lasd9yfnq2n2u9823h5nad" --compressed --insecure)

#取得签到成功结果中:找到的第一个'MB'左边所有字符
tmpStr=${tmpResult%%MB*}
#取得三位数的MB[从右起第四个字符开始截取三个字符]
tmpStr2=${tmpStr: 0-4: 3}
#成功签到结果
successResult='本次签到获得了:'$tmpStr2'MB流量。'

if [ $fail = $tmpResult ]
then
  echo $signDate":签到失败!" >> /test/autoCheckIn/autoCheckIn.log
else
  echo $signDate":签到成功!"$successResult >> /test/autoCheckIn/autoCheckIn.log
fi

#不管签到成功与否,暂时先假设每次都签到成功,不然下次签到没法进行
echo $signDate > /test/autoCheckIn/lastDate.log

#重启crontab命令
sudo service crond restart

Github源码下载地址:

https://github.com/jiahaoit/haoconding.git

参考文章

1、ubuntu crontab 在时间段内随机执行一次

https://www.cnblogs.com/cocoajin/p/6676065.html

2、自己编写自动签到脚本

https://www.jianshu.com/p/579675691cf9

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩Coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档