自动填写疫情通脚本

本贴最后更新于 1507 天前,其中的信息可能已经时移世异

自动填写疫情通脚本

分析填报疫情通过程

首先在微信链接中选择用默认浏览器打开(这里使用的是 edge 浏览器),会发现页面重定向到一个登录页面.

尝试输入账号密码后点开 F12 查看请求头,发现会将表单 post 到"https://xxcapp.xidian.edu.cn/uc/wap/login/check"这个 URL 进行处理. 然后就会跳转到填写疫情通的页面,最后将请求头复制下来,将数据表单 post 到对应的 url 即可完成

代码编写

整个过程分为两次 Post 请求,第一次请求拿到 cookies,第二次请求将表单上传,完成疫情通的填写

class YqtUpload(): def __init__(self): pass # 通过账号密码获取cookies def getCookie(self): pass # 将疫情通数据上传 def dataUpload(self): pass

然后编写方法

def getCookie(self): url_login="https://xxcapp.xidian.edu.cn/uc/wap/login/check" data_login={ # 用户信息修改 "username" : [你的学号], "password" : [你的密码] } headers_login={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50" } while True: num = 1 try: r = requests.post(url_login,data=data_login,headers=headers_login) r.raise_for_status() break except: time.sleep(1) num += 1 finally: if num>5: print("ALERT: TimeOutError...") break cookies_dict = requests.utils.dict_from_cookiejar(r.cookies) # 使用utils.dict_from_cookiejar 将cookies数据类型转化为字典 self.cookies = parse.urlencode(cookies_dict).replace("&",";")

上传数据

def dataUpload(self): url_upload ="https://xxcapp.xidian.edu.cn/ncov/wap/default/save" data_upload={ "zgfxdq": "0", "mjry": "0", "csmjry": "0", "tw": "2", "sfcxtz": "0", "sfjcbh": "0", "sfcxzysx": "0 ", "sfyyjc": "0", "jcjgqr": "0", "remark": "", # 地址修改 # 这里可以看一下请求头中的地址参数然后复制过来 "address": "xxxx", "geo_api_info": 'xxxxxx', "area": "xxxxxx", "province": "xxxxx", "city": "xxxxx", "sfzx": "0", "sfjcwhry": "0", "sfjchbry": "0", "sfcyglq": "0", "ismoved": "0", "sftjhb": "0", "sftjwh": "0", "sfjcjwry": "0", } headers_upload={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50", "cookie":self.cookies } try: r = requests.post(url_upload,headers=headers_upload,data=data_upload) r.raise_for_status() except: print("upload failed!") exit(0) response = json.loads(r.text) print(response['m']+" " + time.asctime( time.localtime(time.time()) ))

部署到服务器

使用 xftp 将代码文件上传到服务器,然后使用 crontab 命令创建自动任务.

直接在 crontab 命令中调用 python 脚本可能会出错,所以可以通过调用 bash 脚本,来使用 bash 脚本调用 python 脚本.

yqt.sh 脚本内容如下

#!/bin/bash cd /home/admin/script /usr/bin/python3 yqt2021.py >> /home/admin/script/yqt2021.log 2>&1

使用 crontab 创建自动任务

cronrab -e //使用vim打开crontab配置文件 crontab -l //查看当前用户定时任务

输入 crontab -e 后,输入
30 8 * * * /home/admin/script/yqt.sh >/dev/null2>&1,在每日上午 8:30 的时候自动执行脚本

以上,就完成了脚本编写到部署的全部内容
最后查看一下日志:

操作成功 Sun Jan 24 08:30:03 2021 操作成功 Mon Jan 25 08:30:02 2021 操作成功 Tue Jan 26 08:30:03 2021 操作成功 Wed Jan 27 08:30:02 2021 操作成功 Thu Jan 28 08:30:02 2021

可以正常运行

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 674 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...