记一次失败的云函数的实践

  • Post author:
  • Post category:其他


引文:

“云应用”:终端与服务(云)端互动的应用,终端操作同步云端,通过

云端备份

保留终端数据。

它把传统软件“本地安装、本地运算”的使用方式变为”即取即用”的服务。

说白了就是,大厂把你的东西放在云上,你拿个浏览器就能操纵他们。包括云函数、云平台、云虚拟机、云服务器、云集群、云数据库、云网站

、云男友、云女友

……


云函数介绍

这个云函数好在哪里呢。你把你的程序写完挂在那里,托管给它就ok。设置个自动触发。它就会按时执行函数。所以它能干什么,那就看你的想象力了。

比如说之前看某位仁兄写过一个某学校的自动体温填报的python程序,说是要放到服务器上设置定时任务自动执行。这就太蠢了,为了一个程序弄了个系统了出来,大炮打蚊子。而放在云函数上执行就再好不过了。

云函数和云服务器对比
云函数 云服务器
费用 免费额度:100万次/月 10元/月
量级 函数级 系统级
操作难度 安装依赖、写好函数就行 需要从一个系统开始
触发器 有专门的触发器,非常简洁 设置系统定时任务,麻烦

他写的整个程序还是很符合云应用的部署场景的。那我们就遵照中华民族的传统美德,助人为乐的帮他解决一下代码的部署问题。下面就直接大段引用这位仁兄的代码实现过程了。代码实现过程之后是由我来写的部署过程。



原理:


体温的提交就是发一条post请求而已(如下图所示)。只要复制这条post请求,让机器每天在指定时间发送就可以了。


技术关键:

获取cookie。经过这几天的不断尝试,发现cookie是否有效决定能否填报成功。

此cookie持续时间很短。


我的实现方案


  1. 获取提交体温时的post,并且转换成python代码段使得该post可以无限次重复利用。
  2. 获取新的cookie替换掉代码段中的旧cookie
  3. 把前两步写成一个程序放在服务器上,每天定时运行。

(帮这位仁兄打个码)



具体实现过程


一、拥有随时发送post的能力

  1. 先到填报网站把需要填的都填了

  2. 打开开发者工具,点到network,然后提交体温

  3. 找到那一条post请求,按右键-> copy -> copy as  curl

  4. 进入这个

    网站

    ,可以把curl直接转换成python代码


https://curl.trillworks.com/

至此,我们已经可以随时发送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



版权声明:本文为weixin_42175197原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。