• Python实现PU口袋活动更新提醒


    PU口袋活动监控,为了让学生变得更加优秀变成分奴,学校要求学生在PU口袋参加活动从而获得第二课堂学分。便诞生了这个脚本…也是理论和实践相结合了吧。

    直接复制,修改关键部分就可以使用了。

    import requests
    import os
    import re
    import time
    from lxml import etree
    import smtplib
    import random
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    title = re.compile(".*?(?P<name>.*?)")
    user_agent_list = ["Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
                       "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
                       "Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/61.0",
                       "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
                       "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
                       "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36",
                       "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
                       "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
                       "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
                       ]
    header = {'User-Agent': random.choice(user_agent_list),"Cookie": "XXXXXXXXXX"}
    
    def get_page_url():
        url_list=[]
        for num in range(1,6):
            url = f"https://XXX.pocketuni.net/index.php?app=event&mod=School&act=board&cat=all&sid=XXX&p={num}"
            url_list.append(url)
        return url_list
    
    def handle(url_list):
        child_url=[]
        for url in url_list:
            resp = requests.get(url,headers=header)
            resp.close()
            resp_tree=etree.HTML(resp.text)
            child_url.extend(resp_tree.xpath("/html/body/div[2]/div/div[3]/div[2]/div[1]/ul/li/div[2]/div[1]/a/@href"))
        return child_url
    
    def handle2(child_urls):
        x=1
        active_name_list=[]
        for url in child_urls:
            resp = requests.get(url,headers=header)
            resp.close()
            active_name =str(title.findall(resp.text)).replace("[","").replace("]","").replace("'","").replace(" ","")
            active_name_list.append(active_name)
        return active_name_list
    
    def send_email(text):
        smtpsrever = 'smtp.163.com'
        em = 'XXX@163.com'
        yz = 'XXXXXX'  
        # 接收邮件的邮箱
        receiver = 'XXXXXX@qq.com'
        # 创建邮件对象
        message = MIMEMultipart('relate')  # 生成一个带附件的邮件对象
        message = MIMEText(f'{text}', 'plain', 'utf-8')
        subject = "爱心提醒"  # 邮件的主题
        # 把邮件的信息组装到邮件对象里
        message['from'] = em
        message['to'] = receiver
        message['subject'] = subject
        smtp = smtplib.SMTP()
        smtp.connect(smtpsrever)
        smtp.login(em, yz)
        smtp.sendmail(em, receiver, message.as_string())
        smtp.quit()
    
    
    
    if __name__=='__main__':
        old_list=[]
        x=1
        while True:
            url_list=get_page_url()
            child_urls=handle(url_list)
            active_name_list=handle2(child_urls)
            if x==1:
                old_list = old_list+active_name_list
                send_email(old_list)
                x+=1
            update_list = [x for x in active_name_list if x not in old_list]
            f = open('D:\\pocketuni.log', 'a+', encoding='utf-8')
            if len(update_list)==0:
                print("未更新,最近一次查看时间为:",time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),file=f)
            else:
                print("检测到更新,已推送。推送时间为:",time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),file=f)
                old_list = old_list + update_list
                send_email(update_list)
            f.close()
            time.sleep(900)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92

    说明:
    只需要改一下cookie、邮箱、授权码,如果有需要还可以改下过滤条件(这里我只要有计算机学院的新活动就会推送)发送邮箱要开通POP3/SMTP服务获取授权码。

    每15分钟查看一次活动列表,执行的结果我存到了外部文件中,可以到D:\pocketuni.log文件中查看执行结果,如果有活动更新会邮箱提醒。

    可以将程序打包成.exe可执行文件:

    pyinstaller -F -w -i p.ico pk.py
    
    -F 打包一个单一的文件
    -w 程序执行的时候不会启动命令行(只对windows有效)
    -i 参数是指定打包后的图标,ico图标转换失败,那就先安装Pillow库
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    打包后最后一行会看到success就证明打包成功。然后在生成的dist目录下找到.exe可执行文件。
    双击启动,在任务管理器中查看进程。也可以设置成开机自启。
    在这里插入图片描述

    执行的日志记录:
    在这里插入图片描述
    邮箱提醒:
    在这里插入图片描述

    博客参考地址

  • 相关阅读:
    容器管理Rancher与容器监控
    org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
    网络安全之CSRF漏洞原理和实战,以及CSRF漏洞防护方法
    UI组件库(element 、antdesign 等)下拉组件值为id不回显的坑
    [Apple][macOS]没有原来的苹果设备接收验证码,怎么激活新的苹果设备(Macbook、iPhone之类)?
    产品与技术的平衡
    哈希表简介
    Linux-相关操作
    使用Leaflet对WMS做空间几何范围查询
    kubernetes 集群安装-准备篇
  • 原文地址:https://blog.csdn.net/qq_45796486/article/details/128058708