实在是不想每天都去填报数据,,经常搞忘了,还要算考勤,,,,
其实还是比较简单的,主要先利用requests模块进行登陆,然后post数据填报,在读取历史数据有没有今天的记录实现一个校验,最后再利用twilio模块将填报的结果短信发送到我自己的手机上。脚本完成后放到服务器上面设置定时每天执行就好了。
这里就主要是用浏览器的检查NetWork功能
进行登陆,填报,查看历史操作,通过观察NetWork最后找出三个url以及登陆和填报的payload,说起来本来历史记录的页面是js页面,直接抓还抓不到,结果发现在从历史记录详情返回上一地址时会返回一个列表,里面是所有的历史记录,,,,,???我佛了
在这里,登陆url会返回一个字典,其中就有登陆状态,值是失败或者成功
def imfine(): #填报数据模块
ss = requests.session()#利用session模块实现会话维持
rr=ss.post(url_log,data=paylaod)#登陆
a="morning"
if "成功" in rr.text: #判断登陆状态
print("登陆成功hahah")
a=a+"\nlogin hahahah\n"
##
else:
print("登陆失败,可能是密码啥子的错了")
a=a+"login error"
return a#用于短信发送的数据
在这里,填报数据url会返回一个字典,当成功时,会有填报成功的值存在
IamFine = ss.post(url_go ,data=paylaod2)#填报数据
if "填报成功" in IamFine.text:
print("填好了哦,继续睡吧")
a=a+"op is done,keep sleeping\n"
else:
print("数据发送失败")
a=a+"sent data error\n"
print(IamFine.text)
在本次案例中,post历史记录的url会返回一个很大的字典,打开当天的数据主要在[0:1000],当数据未填报时,当天数据的值是空的只有日期有值
his=ss.post(url_history)
if name in his.text[0:1000]:
print("检查当日数据记录已存在---睡吧睡吧")
a=a+"cheacking today 's data,emmmmm,look nice\n"
else:
print("历史记录发现今天的数据好像是空空的")
a=a+"cheacking today 's data,oh no no no warning\n"
目前为之数据的发送以及简单的检测就完成了,接下来是一个可选功能,短信通知
pip install twilio
为什么说是可选功能勒,因为这个东西要注册才能用,然鹅因为某种神秘原因,不可以直接注册,需要利用魔法才能注册,
注册需要验证邮箱
注册好了之后进去就可以发现你的sid和token,请注意在这个页面,我用硬核水印盖住的地方,就在绿色的$13.12的右边,那里可以直接申请一个twilio的手机号
然后还有一步,因为这是免费用户所以,你的接收方的手机号需要验证之后才可以接收短信,验证手机号链接诶
点那个红色的加号,就会弹出验证弹窗,输入你的手机号,然后验证短信就可以了
目前为止,准备工作就好了,现在我们有四个参数了
#####可选功能,短信通知服务
#####短信服务官网https://www.twilio.com/
##
tz = 0 #是否开启短信通知服务,默认关闭
phonenum=""#收短信的手机号
account_sid = ''#你的SID
account_token =''#你的token
from_id = ''#发短信的手机号
然后来写一个函数来发短信
官方的python脚本文档
def tongzhi(msg): #短信通知模块
client = Client(account_sid,account_token)
message = client.messages.create(
to = '+86'+phonenum,
from_=from_id,
body = msg
)
print(message.sid)
现在所有的部分都写好了
import requests
from twilio.rest import Client ##加载发送短信客户端模块 pip install twilio
###################### 请修改这里,你的填报数据 #####################
name =""
#
################### 还有这里,你的登陆用户名和密码 ##############
paylaod = { #登陆数据
'username': , #你的登陆账号
'password': #你的密码
}
##
#####可选功能,短信通知服务
#####短信服务官网https://www.twilio.com/
##
tz = 0 #是否开启短信通知服务,默认关闭
account_sid = ''
account_token =''
from_id = ''
##
#填报数据 ,默认一切正常
##
paylaod2 = { #
}
url_history= "http:/rTbqk" #查看历史记录链接艾
url_log = "http://le" #登陆链接诶
url_go = "http://A.do" #填报数据链接诶
def imfine(): #填报数据模块
ss = requests.session()#利用session模块实现会话维持
rr=ss.post(url_log,data=paylaod)#登陆
a="morning"
if "成功" in rr.text: #判断登陆状态
print("登陆成功hahah")
a=a+"\nlogin hahahah\n"
IamFine = ss.post(url_go)#填报数据 ,data=paylaod2
if "填报成功" in IamFine.text:
print("填好了哦,继续睡吧")
a=a+"op is done,keep sleeping\n"
else:
print("数据发送失败")
a=a+"sent data error\n"
print(IamFine.text)
his=ss.post(url_history)
if name in his.text[0:1000]:
print("检查当日数据记录已存在---睡吧睡吧")
a=a+"cheacking today 's data,emmmmm,look nice\n"
else:
print("历史记录发现今天的数据好像是空空的")
a=a+"cheacking today 's data,oh no no no warning\n"
else:
print("登陆失败,可能是密码啥子的错了")
a=a+"login error"
return a
def tongzhi(msg): #短信通知模块
client = Client(account_sid,account_token)
message = client.messages.create(
to = '+86'+phonenum,
from_=from_id,
body = msg
)
print(message.sid)
if __name__ == "__main__":
mes=imfine() #调用函数
if tz:
tongzhi(mes.encode("utf8")) #发送通知
博主的是阿里云的学生机,上传到服务器之后,输入
crontab -l
查看已存在的计划任务
输入
crontab -e
* 8 * * * python3 /root/FileName.py #需要绝对路径
在将脚本放到服务器上的是否还出了一些小问题,首先是pip不能install库了,然后python3又一直unicodeencodeerror: ‘ascii’ codec can’t encode characters in position 0-3: ordinal not in range(128),搜索了半天,都没啥用,神烦,,,,,最后发现一个解决办法
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
这三条命令下去,啥都好了,完事大吉