2021-08-18

本文介绍了如何创建一个Python脚本来自动登录哈工大每日疫情上报系统,完成地理位置获取、信息提交,并通过邮件发送截图。详细步骤包括环境配置、浏览器驱动下载、Selenium库的使用,以及设置定时任务执行脚本。
摘要由CSDN通过智能技术生成

2021-08-18 哈工大自动每日上报(本部)


因为最近哈工大的每日上报界面有所改动,并且要求至少连续14天上报,就想着搞一个脚本,每天定时上报。以下内容皆为笔者亲自实践证明过的,若有不足错误之处,还望指正。

免责声明

一切责任由使用者自行承担。

感谢以下的两篇文章,为我提供了最主要的代码来源:

  1. 哈工大深圳每日上报
  2. 哈工大本部每日上报

写在前面

实现的功能:

  1. edge会自动登录统一身份认证,并且会点开“每日上报”,点击“获取地理位置”,点击“我已认真阅读”,并且自动提交。提交之后的页面会自动截图,保存在当前代码的.py文件同一位置下的image文件夹里面。如下所示:图中笔者把这个代码命名为DailtReport.py
    在这里插入图片描述
    并且会将截图以邮件的形式发送给接收者邮箱(代码当中的receiver变量)当中
    2.电脑每日定点执行这个代码,具体操作见“五 每日定点执行代码”

一:配置完整的python运行环境

笔者在此之前就已经在vscode配置好了完整的python环境,如果之前完全没有配置过的,可参考:
python安装与vscode环境配置
vscode当中好用的python插件,可参考:装上这 10个vscode插件,python才真的是无敌的存在!

二:下载浏览器驱动

注:chrome driver同理可下载,具体教程可参考:chromedriver下载与安装方法
在这里只叙述edge driver的下载配置。
首先查询电脑上的edge的版本
在这里插入图片描述

笔者的版本如上所示,然后进入下方的官网
edge driver官网:edge driver官网
找到自己的版本点击下载,笔者下载的版本如下图红框中的x64
在这里插入图片描述
下载之后保存到edge同一安装路径下。
在这里插入图片描述

三:下载selenium库

win+r输入cmd打开终端,或者打开文件管理器在空白处shift+鼠标右键打开powershell均可。输入:

pip install selenium

如果安装成功,输入:

pip show selenium

即可看到相关信息
在这里插入图片描述

四:关于代码

注意:

1.在运行之前需要改动的部分在注释当中标出,望注意!
2.关于邮箱密码password_email
qq邮箱-设置:
在这里插入图片描述
点击“账户”:
在这里插入图片描述
下拉至如下图所示,点击IMAP/SMTP处的“开启”(因为笔者之前点过了,所以图中是关闭):
在这里插入图片描述
之后按照弹窗提示发送信息,即可开启:
在这里插入图片描述
之后就会生成验证码填入password_email即可。

代码如下

from selenium import webdriver
import time
import smtplib
from selenium.webdriver.common.keys import Keys
from pathlib import Path
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.header import Header

# 需要改动的部分如下-----------------------------
stu_number = ['1190200001']  # 学号(用来统一身份认证登录)
stu_password = ['xxxxxx']  # 密码(用来统一身份认证登录)
stu_name = 'xxxxxx'  # 保存的截图名称会用到,不必须
sender = 'xxxxx7@qq.com' # 发送者邮箱
receiver = 'xxxx@qq.com' # 接受者邮箱
password_email = 'xxxxxx' # 邮箱密码见“四 关于代码”注意部分所述
# 输入webdriver放置的路径
driver_url = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe"
driver = webdriver.Edge(executable_path=driver_url)
# 需要改动的部分如上-----------------------------

# 访问网址
url_login = "https://ids.hit.edu.cn/authserver/login?service=https%3A%2F%2Fxg.hit.edu.cn%2Fzhxy-xgzs%2Fcommon%2FcasLogin%3Fparams%3DL3hnX21vYmlsZS94c0hvbWU%3D"
driver.get(url_login)

# 最大化窗口
driver.maximize_window()

# 学号定位
username = driver.find_element_by_id('username')
# 输入学号
for i in range(len(stu_number)):
    username.send_keys(stu_number[i])
# 点击记住密码
driver.find_element_by_class_name('icheckbox_square-green').click()
# 密码定位
password = driver.find_element_by_id('password')
# 输入密码
for i in range(len(stu_password)):
    password.send_keys(stu_password[i])
password.send_keys(Keys.ENTER)  # 密码输入完毕,键入enter表示确认
time.sleep(1)
# 点击每日上报
dailyReport = driver.find_element_by_partial_link_text('每日上报').click()
time.sleep(1)
# 点击获取地理位置
driver.find_element_by_id('dtjwd').click()
time.sleep(3)
# 我已仔细阅读并同意
driver.find_element_by_xpath('//*[@id="mrsb"]/div[63]/label').click()
time.sleep(1)
# 点击提交
driver.find_element_by_xpath(
    "//div[@class = 'report_bottom']/span[text()='提交信息']").click()

# 截图存放在当前py文件所处位置下的image文件夹下面
fileName = u'.\\image'
# 获取当前时间
current_time = time.strftime(stu_name + "-20%y-%m-%d-%H-%M-%S",
                             time.localtime(time.time()))
# 截图名称
picture_location = fileName + '\\' + current_time + '.png'
# 如果image文件夹存在不做处理,否则新建image文件夹
if Path(fileName).is_dir():
    pass
else:
    Path(fileName).mkdir()
# 浏览器截图拍照,并且保存为事先设置好的png
driver.save_screenshot(picture_location)
# 关闭浏览器
driver.quit()

# 邮件服务器
# mixed -- 混合型 alternative--文本混合 related--多媒体元素
message = MIMEMultipart('related')
# 邮件头信息
message['From'] = Header(sender)
message['To'] = Header(receiver)
message['Subject'] = Header('今日每日上报截图', 'utf-8')
# 开启发信服务,这里使用的是加密传输
# 正文-图片 通过html格式来放图片,可通过cid 编号实现上传多个图片
email_body = '''
<p>今日疫情已经上报,无需回复</p>
<p>\n\t上报截图如下:</p>
<p><img src='cid:image1'></p>
'''
message.attach(MIMEText(email_body, 'html', 'utf-8'))
# 获取图片
file = open(picture_location, 'rb')
img = MIMEImage(file.read())
file.close()
img.add_header('Content-ID', '<image1>')
# 添加图片
message.attach(img)

# 选择用qq SMTP/IMAP发送
smtp_server = 'smtp.qq.com'
server = smtplib.SMTP_SSL(smtp_server)
# 465为SMTP端口号(绝大多数)
server.connect(smtp_server, 465)
# 用验证码登录qq邮箱
server.login(sender, password_email)
# 发送邮件
server.sendmail(sender, receiver, message.as_string())
# 关闭服务器
server.quit()


五:每日定点执行代码

1.把.py打包成.exe
win+r输入cmd打开终端,或者打开文件管理器在空白处shift+鼠标右键打开powershell均可
输入:

pip3 install pyinstaller

待安装成功之后,即可输入:(笔者把这个代码存为DailyReport.py)

pyinstaller -F DailyReport.py

完成之后,.exe就会在同一路径下的dist文件夹当中:
在这里插入图片描述
在这里插入图片描述
之后:
2. 此电脑-右键:管理-任务计划程序-任务计划程序库(左键单击选中)
3.在右侧单击创建任务
在这里插入图片描述

接下来配置成如图所示:
注意填写自己看得懂的名称,自由发挥即可。
在这里插入图片描述

4.在触发器-新建菜单下创建新任务,任务的高级设置中可以设定重复次数
每日开始的时间自由发挥
在这里插入图片描述
4.在操作一栏新建,选择程序所在的路径
注意这里应该选择的是.exe路径
在这里插入图片描述
5.最后“条件”和“设置”建议修改成如下所示:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值