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(".*?<title>(?P<name>.*?)</title>")
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)

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

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

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

pyinstaller -F -w -i p.ico pk.py

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

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

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

博客参考地址

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿年、嗯啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值