首先,我们用python实现自动打开学校网页,填入账号密码,自动点击按钮
按F12查看网页源码,查找到按钮源码位置(可以通过CTRL+F关键字定位)
这里,我们使用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()
这里的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()
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('邮件发送成功!')
首先创建虚拟环境,如果不创建的话,在本地打包会把本地所有库一起打包,文件非常大
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_())