手把手教你制作疫情自动打卡软件,并邮件通知班长

内容包括:python网页自动化,python邮件发送,pyqt5可视化界面,pyinstaller软件打包

python网页自动化

首先,我们用python实现自动打开学校网页,填入账号密码,自动点击按钮
手把手教你制作疫情自动打卡软件,并邮件通知班长_第1张图片
按F12查看网页源码,查找到按钮源码位置(可以通过CTRL+F关键字定位)
手把手教你制作疫情自动打卡软件,并邮件通知班长_第2张图片

这里,我们使用css选择器找到按钮位置,后面一次类推,每个网站代码有些许不同,但常见几种方法就可以解决了,比如后面我是用find_element_by_class_name来定位按钮的

注意:报这个错’chromedriver’ executable needs to be in PATH,需要自己配置chromedriver.exe

def daka(userid,password):
    chromedriver = "C:\Program Files (x86)\Google\Chrome\Application"
    os.environ["webdriver.ie.driver"] = chromedriver
    chrome_options = Options()
    # chrome_options.add_argument('--headless')   #添加这个参数,网页不会显示出来
    driver = webdriver.Chrome()  # chrome_options=chrome_options
    driver.get(
        '填入你要打开的网页')
    
    #这里根据自己网站源码自己做修改
    driver.find_element_by_css_selector('input[name=username]').send_keys(userid)
    driver.find_element_by_css_selector('input[name=password]').send_keys(password)
    time.sleep(3)
    driver.find_element_by_css_selector('input[name=submit]').click()
    time.sleep(10)
    driver.find_element_by_css_selector('input[name=fieldCNS]').click()
    time.sleep(2)
    driver.find_element_by_class_name('command_button_content').click()
    time.sleep(2)
    driver.find_element_by_class_name('dialog_button default fr').click()

python邮件发送

这里的password需要自己到qq邮箱上获取

def send():
    # 发信方的信息:发信邮箱,QQ 邮箱授权码
    from_addr = '发送者邮箱'
    password = ''

    # 收信方邮箱
    to_addr = '收信方邮箱'
    # 发信服务器
    smtp_server = 'smtp.qq.com'
    # 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
    msg = MIMEText('填入内容', 'plain', 'utf-8')

    # 邮件头信息
    msg['From'] = Header(from_addr)
    msg['To'] = Header(to_addr)
    msg['Subject'] = Header('填入邮件标题')

    # 开启发信服务,这里使用的是加密传输
    server = smtplib.SMTP_SSL(smtp_server)
    server.connect(smtp_server, 465)
    # 登录发信邮箱
    server.login(from_addr, password)
    # 发送邮件
    server.sendmail(from_addr, to_addr, msg.as_string())
    # 关闭服务器
    server.quit()

pyqt5可视化界面

手把手教你制作疫情自动打卡软件,并邮件通知班长_第3张图片

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("登陆界面")
        self.setWindowIcon(QIcon("D:\ICO\ooopic_1552382147.ico"))
        self.resize(500, 200)
        self.Co_Width = 40
        self.Co_Heigth = 20
        self.setup_ui()

    def setup_ui(self):
        self.lab_l = QLabel("帐户:", self)  # 帐户标签
        self.Lin_l = QLineEdit(self)  # 帐户录入框
        self.lab_p = QLabel("密码:", self)  # 密码标签
        self.Lin_p = QLineEdit(self)  # 密码录入框
        self.Lin_p.setEchoMode(QLineEdit.Password)  # 设置密文显示
        self.Pu_l = QPushButton(QIcon("D:\ICO\ooopic_1556416225.ico"), "打卡", self) 
        self.Pu_l.clicked.connect(self.Login)

    def resizeEvent(self, evt):  # 重新设置控件座标事件
        # 帐户标签
        self.lab_l.resize(self.Co_Width, self.Co_Heigth)
        self.lab_l.move(self.width() / 3, self.height() / 5)
        # 帐户录入框
        self.Lin_l.move(self.lab_l.x() + self.lab_l.width(), self.lab_l.y())
        # 密码标签
        self.lab_p.resize(self.Co_Width, self.Co_Heigth)
        self.lab_p.move(self.lab_l.x(), self.lab_l.y() + self.lab_l.height() * 2)
        # 密码录入框
        self.Lin_p.move(self.lab_p.x() + self.lab_p.width(), self.lab_p.y())
        # 打卡按钮
        self.Pu_l.move(self.Lin_p.x() + self.Lin_p.width() / 4, self.lab_p.y() + self.lab_p.width())

    def Login(self):
        daka(self.Lin_l.text(),self.Lin_p.text())
        time.sleep(2)
        #send()
        print('邮件发送成功!')

pyinstaller打包exe

首先创建虚拟环境,如果不创建的话,在本地打包会把本地所有库一起打包,文件非常大

conda create -n 虚拟环境名字 python==3.7 #创建虚拟环境

conda activate 虚拟环境名字 #激活虚拟环境

cd …进入项目地址

pip install …安装所需环境

pyinstaller -F -w -i daka.py

给大家解释一下其中Pyinstaller的参数,其中-F参数代表制作独立的可执行程序。

-w是指程序启动的时候不会打开命令行。如果不加-w的参数,就会有黑洞洞的控制台窗口出来。此外,-w参数在GUI界面时非常有用。

完整代码

import os
import sys
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
from PyQt5.Qt import *


def send():
    # 发信方的信息:发信邮箱,QQ 邮箱授权码
    from_addr = '发送者邮箱'
    password = ''

    # 收信方邮箱
    to_addr = '收信方邮箱'
    # 发信服务器
    smtp_server = 'smtp.qq.com'
    # 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
    msg = MIMEText('填入内容', 'plain', 'utf-8')

    # 邮件头信息
    msg['From'] = Header(from_addr)
    msg['To'] = Header(to_addr)
    msg['Subject'] = Header('填入邮件标题')

    # 开启发信服务,这里使用的是加密传输
    server = smtplib.SMTP_SSL(smtp_server)
    server.connect(smtp_server, 465)
    # 登录发信邮箱
    server.login(from_addr, password)
    # 发送邮件
    server.sendmail(from_addr, to_addr, msg.as_string())
    # 关闭服务器
    server.quit()

def daka(userid,password):
    chromedriver = "C:\Program Files (x86)\Google\Chrome\Application"
    os.environ["webdriver.ie.driver"] = chromedriver
    chrome_options = Options()
    # chrome_options.add_argument('--headless')   #添加这个参数,网页不会显示出来
    driver = webdriver.Chrome()  # chrome_options=chrome_options
    driver.get(
        '填入你要打开的网页')
    
    #这里根据自己网站源码自己做修改
    driver.find_element_by_css_selector('input[name=username]').send_keys(userid)
    driver.find_element_by_css_selector('input[name=password]').send_keys(password)
    time.sleep(3)
    driver.find_element_by_css_selector('input[name=submit]').click()
    time.sleep(10)
    driver.find_element_by_css_selector('input[name=fieldCNS]').click()
    time.sleep(2)
    driver.find_element_by_class_name('command_button_content').click()
    time.sleep(2)
    driver.find_element_by_class_name('dialog_button default fr').click()

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("登陆界面")
        self.setWindowIcon(QIcon("D:\ICO\ooopic_1552382147.ico"))
        self.resize(500, 200)
        self.Co_Width = 40
        self.Co_Heigth = 20
        self.setup_ui()

    def setup_ui(self):
        self.lab_l = QLabel("帐户:", self)  # 帐户标签
        self.Lin_l = QLineEdit(self)  # 帐户录入框
        self.lab_p = QLabel("密码:", self)  # 密码标签
        self.Lin_p = QLineEdit(self)  # 密码录入框
        self.Lin_p.setEchoMode(QLineEdit.Password)  # 设置密文显示
        self.Pu_l = QPushButton(QIcon("D:\ICO\ooopic_1556416225.ico"), "打卡", self)  
        self.Pu_l.clicked.connect(self.Login)

    def resizeEvent(self, evt):  # 重新设置控件座标事件
        # 帐户标签
        self.lab_l.resize(self.Co_Width, self.Co_Heigth)
        self.lab_l.move(self.width() / 3, self.height() / 5)
        # 帐户录入框
        self.Lin_l.move(self.lab_l.x() + self.lab_l.width(), self.lab_l.y())
        # 密码标签
        self.lab_p.resize(self.Co_Width, self.Co_Heigth)
        self.lab_p.move(self.lab_l.x(), self.lab_l.y() + self.lab_l.height() * 2)
        # 密码录入框
        self.Lin_p.move(self.lab_p.x() + self.lab_p.width(), self.lab_p.y())
        # 打卡按钮
        self.Pu_l.move(self.Lin_p.x() + self.Lin_p.width() / 4, self.lab_p.y() + self.lab_p.width())

    def Login(self):
        daka(self.Lin_l.text(),self.Lin_p.text())
        time.sleep(2)
        send()
        print('邮件发送成功!')

if __name__ == '__main__':
    App = QApplication(sys.argv)
    Win = Window()
    Win.show()
    sys.exit(App.exec_())

你可能感兴趣的:(有趣的程序)