python实现自动每日数据填报和结果短信通知

实在是不想每天都去填报数据,,经常搞忘了,还要算考勤,,,,

文章目录

    • 思路
      • 第一步:将url和payload确认下来
      • 第二步:进行登陆操作
      • 第三步:发送填报数据
      • 第四步:检测是否已经填写数据
      • 第五步:twilio短信通知
      • 组合
      • 服务器自动执行
      • 尾巴

思路

其实还是比较简单的,主要先利用requests模块进行登陆,然后post数据填报,在读取历史数据有没有今天的记录实现一个校验,最后再利用twilio模块将填报的结果短信发送到我自己的手机上。脚本完成后放到服务器上面设置定时每天执行就好了。

第一步:将url和payload确认下来

这里就主要是用浏览器的检查NetWork功能
python实现自动每日数据填报和结果短信通知_第1张图片
进行登陆,填报,查看历史操作,通过观察NetWork最后找出三个url以及登陆和填报的payload,说起来本来历史记录的页面是js页面,直接抓还抓不到,结果发现在从历史记录详情返回上一地址时会返回一个列表,里面是所有的历史记录,,,,,???我佛了
python实现自动每日数据填报和结果短信通知_第2张图片

第二步:进行登陆操作

在这里,登陆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"

目前为之数据的发送以及简单的检测就完成了,接下来是一个可选功能,短信通知

第五步:twilio短信通知

python实现自动每日数据填报和结果短信通知_第3张图片
官网
安装库

pip install twilio

为什么说是可选功能勒,因为这个东西要注册才能用,然鹅因为某种神秘原因,不可以直接注册,需要利用魔法才能注册,
python实现自动每日数据填报和结果短信通知_第4张图片
注册需要验证邮箱
注册好了之后进去就可以发现你的sid和token,请注意在这个页面,我用硬核水印盖住的地方,就在绿色的$13.12的右边,那里可以直接申请一个twilio的手机号
python实现自动每日数据填报和结果短信通知_第5张图片
然后还有一步,因为这是免费用户所以,你的接收方的手机号需要验证之后才可以接收短信,验证手机号链接诶
点那个红色的加号,就会弹出验证弹窗,输入你的手机号,然后验证短信就可以了
python实现自动每日数据填报和结果短信通知_第6张图片
目前为止,准备工作就好了,现在我们有四个参数了

#####可选功能,短信通知服务
#####短信服务官网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

编辑任务格式如下
python实现自动每日数据填报和结果短信通知_第7张图片
博主想要每天早上八点自动执行那么就是

* 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

这三条命令下去,啥都好了,完事大吉

你可能感兴趣的:(#,python,笔记)