最新文章:

首页 Python

Python模拟登陆健康打卡(终)

发布时间:2020年03月15日 评论数:抢沙发 阅读数:298

    //(新加了一个判断是否打卡的功能,可以加个twilion每天打卡成功给手机发个短信)

    应该是最终版了,加上了一个循环迭代打卡,直到打卡成功才退出,然后加个了打卡成功发送邮件功能,每天收到邮件就能确定是否打卡成功


    最近疫情在家,学校在学生管理网站上开了一个健康打卡栏,要求每天中午12点前打卡。

    秉承着程序员懒惰的特性

    写了一个爬虫,首先模拟post请求登陆,cookie保存在session中,然后post健康打卡请求。

    通过抓包直接获得post的url和data 然后用python requests包进行发送就行。

    直接上源码

    1、打卡部分


    import requests
    import sys
    import io
    import re
    import SetEmail
    
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
    
    #登录时需要POST的数据
    data = r'{"ip":"0.0.0.0","city":"202.197.121.40","usercode":"学号","pwd":"密码"}'
    
    #设置请求头
    headers = {'User-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}
    
    #登录时表单提交到的地址(通过抓包获取)
    login_url = 'http://iteaching.hunnu.edu.cn/Login/Login'
    
    #健康显示列表
    url = 'http://iteaching.hunnu.edu.cn/Student/yjs_stujkk/GetList_log'
    
    #健康?
    urlhealth = 'http://iteaching.hunnu.edu.cn/Student/yjs_stujkk/SaveInfo' #健康表单提交地址
    #健康提交表单
    datahealth = {'tval': '1',
                  'pntype': '8'}
    
    #todos = open('/log.txt', 'a') #以“追加模式”打开文件
    
    #循环直到h打卡成功
    while(1):
    
        #构造Session会话
        sessionh = requests.Session()
    
        #在session中发送登录请求,此后这个session里就存储了cookie
        sessionh.post(login_url, data=data) #模拟登陆
    
        #提交健康打卡
        sessionh.post(urlhealth,datahealth)
    
        #获取打卡后的健康列表
        resp = sessionh.get(url)
    
        string = resp.content.decode('utf-8') #返回打开列表转string
    
        pattern = re.compile(r'\"bsubmit\": (.*?),') #正则匹配查看提交数目
        result = pattern.findall(string)
        flag = 0
        if len(result)<1: #未进入
            continue
        for i in result:
            if i  != '1': #如果存在未打卡则跳出
                flag = 1
                break
        if flag == 1:
            sessionh.close()
            continue
        patterntime = re.compile(r'\"tdate\": \"(.*?)\",')
        resulttime = patterntime.findall(string)
    
        String = str(resulttime[0])+" : 何捷舟打卡成功\n" #年月日和打卡成功信息
        sessionh.close()
        break
    
    
    SetEmail.mail(String)
    #todos.close()
    
    


    2、发送邮件部分


    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    
    my_sender = '********@**.com' # 发件人邮箱账号
    my_pass = '************'      # 发件人邮箱密码(当时申请smtp给的口令)
    my_user = '***********'       # 收件人邮箱账号,我用的学校邮箱
    def mail(String):
        ret=True
        try:
            msg=MIMEText(String,'plain','utf-8')
            msg['From']=formataddr(["hdc",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To']=formataddr(["hdc",my_user])      # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject']="健康打卡"                   # 邮件的主题,也可以说是标题
    
            server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是465
            server.login(my_sender, my_pass)             # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()# 关闭连接
            #print("邮件发送成功")
        except Exception:# 如果 try 中的语句没有执行,则会执行下面的 ret=False
            #print("邮件发送失败")
    
    


    因为采用的mac电脑所以直接就设置的crontab 每天早上自动执行爬虫打卡。https://www.jianshu.com/p/333d799aebb1

    如果是windows电脑可以参考:https://jingyan.baidu.com/article/a681b0dee8dcae7b19434623.html

    测试收到邮件

二维码加载中...
本文作者:HDC      文章标题: Python模拟登陆健康打卡(终)
本文地址:http://hdcin.cn/?post=312
版权声明:若无注明,本文皆为“小胖Blog's”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论