引文:
“云应用”:终端与服务(云)端互动的应用,终端操作同步云端,通过
云端备份
保留终端数据。
它把传统软件“本地安装、本地运算”的使用方式变为”即取即用”的服务。
说白了就是,大厂把你的东西放在云上,你拿个浏览器就能操纵他们。包括云函数、云平台、云虚拟机、云服务器、云集群、云数据库、云网站
、云男友、云女友
……
云函数介绍
这个云函数好在哪里呢。你把你的程序写完挂在那里,托管给它就ok。设置个自动触发。它就会按时执行函数。所以它能干什么,那就看你的想象力了。
比如说之前看某位仁兄写过一个某学校的自动体温填报的python程序,说是要放到服务器上设置定时任务自动执行。这就太蠢了,为了一个程序弄了个系统了出来,大炮打蚊子。而放在云函数上执行就再好不过了。
云函数 | 云服务器 | |
费用 | 免费额度:100万次/月 | 10元/月 |
量级 | 函数级 | 系统级 |
操作难度 | 安装依赖、写好函数就行 | 需要从一个系统开始 |
触发器 | 有专门的触发器,非常简洁 | 设置系统定时任务,麻烦 |
他写的整个程序还是很符合云应用的部署场景的。那我们就遵照中华民族的传统美德,助人为乐的帮他解决一下代码的部署问题。下面就直接大段引用这位仁兄的代码实现过程了。代码实现过程之后是由我来写的部署过程。
原理:
体温的提交就是发一条post请求而已(如下图所示)。只要复制这条post请求,让机器每天在指定时间发送就可以了。
技术关键:
获取cookie。经过这几天的不断尝试,发现cookie是否有效决定能否填报成功。
此cookie持续时间很短。
我的实现方案
:
- 获取提交体温时的post,并且转换成python代码段使得该post可以无限次重复利用。
- 获取新的cookie替换掉代码段中的旧cookie
- 把前两步写成一个程序放在服务器上,每天定时运行。
(帮这位仁兄打个码)
具体实现过程
一、拥有随时发送post的能力
先到填报网站把需要填的都填了
打开开发者工具,点到network,然后提交体温
找到那一条post请求,按右键-> copy -> copy as curl
进入这个
网站
,可以把curl直接转换成python代码至此,我们已经可以随时发送post,然后该考虑如何获取新的cookie了。由于该小程序的页面跳转很多,我选择通过自动化测试工具,使用南开账号密码登陆,然后拿到cookie。具体的页面跳转逻辑可以参考
第一天的探索记录
https://blog.csdn.net/weixin_42175197/article/details/107378107
二、随时获取最新的cookie
按照链接里文章所提供的网页跳转逻辑,用浏览器驱动和自动化测试直接写就行。没什么好讲的。
三、把前两步拼装起来,直接放代码了
/* 代码说明:
* 经过验证,发现url中的时间戳不起作用。出于周全的考虑,还是重写了url里的时间戳。
* 最后把主函数里的唯一一个语句的两个参数换成自己的学号和密码(需要通过南开大学统一认证)。后附验证网址
*
在家同学的版本需要按照步骤一,重新改一下data部分
,毕竟原代码里填的是我家的地址。* 当然,如果你懂url解码的的话,可以直接从data q2和q10show里面改就好。下面放一个解码网站的链接
*/
南开大学统一身份认证网址
https://sso.nankai.edu.cn/sso/login?service=https://i.nankai.edu.cn/user/simpleSSOLogin
编码和解码
http://tool.chinaz.com/tools/urlencode.aspx
在家同学的版本
import time import json import requests from selenium import webdriver #根据账号密码获取cookie def getCookie(uName,pWord): browser = webdriver.Chrome() browser.implicitly_wait(10) url = 'https://feishu.nankai.edu.cn/?appid=229' browser.get(url) browser.find_element_by_xpath('//*[@id="root"]/div/div[6]/div[1]/div[2]/div/div[1]/div/div').click() browser.find_element_by_xpath('//*[@id="root"]/div/div[6]/div[1]/div[1]/div/div[2]/div/div[7]/div').click() browser.find_element_by_xpath('//*[@id="root"]/div/div[6]/div[1]/div/div/div[3]/div/div[3]/div/div/input').send_keys('nankai') browser.find_element_by_xpath('//*[@id="root"]/div/div[6]/div[1]/div/div/div[3]/div/div[5]').click() browser.find_element_by_id('inputUrpid').send_keys(uName) browser.find_element_by_id('inputPassword').send_keys(pWord) browser.find_element_by_xpath('/html/body/div[3]/div[2]/form/div[3]/div[2]/button').click() time.sleep(10) try:#处理弹窗 alert = browser.switch_to.alert while(alert): alert.accept() time.sleep(1) alert = browser.switch_to.alert finally: c = browser.get_cookies()[0]['value'] print('get cookie: ',c,' from accout', {'uName':uName,'pWord':pWord}) browser.close() return c #传入新的cookie并发送post def post(cookie): headers = { 'authority': 'jkcj.nankai.edu.cn', 'accept': '*/*', 'x-requested-with': 'XMLHttpRequest', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.1