复制Cookie+CURL命令
最近有一个网站需要天天签到,显而易见的是手动签到太麻烦了,肯定是写脚本啊,偷了下懒,直接用chrome审查元素找到“签到按钮”对应的方法,点击签到按钮后,切换到NetWork栏右键复制签到方法的CURL。
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编程杂记
贴出源码:
#! /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":"u60a8u4f3cu4e4eu5df2u7ecfu7b7eu5230u8fc7u4e86...","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