前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python实现平台自动打卡

使用Python实现平台自动打卡

作者头像
李志伟
发布2020-08-17 20:20:15
1.7K0
发布2020-08-17 20:20:15
举报
文章被收录于专栏:为学为学

众所周知,人的懒惰是技术发展的一大动力。 现在正处疫情期间,因为我总是忘记及时健康打卡而导致被年级群通报,故干脆写了个Python脚本来自动打卡。 若之后我的身体状态、所在地等信息都没有改变的话,这个脚本就能帮我完成一个小任务嘞。

代码部分

代码整体并不难。

通过使用Selenium库,能够将一切网页端的操作模拟成一个真正的用户在操作。

Selenium安装

库本身并不难安装,只需要运行以下指令即可:

pip install selenium

但要注意,要想使用它还需要安装浏览器驱动。比如我用的是Chrome,就需要安装ChromeDriver

ChromeDriver的版本号要与本机安装的Chrome浏览器的版本相同。打开Chrome,可以通过点击右上角的菜单按钮(即三个竖直排列的"."),然后选择"帮助" > "关于 Google Chrome",即可看到浏览器的版本号:

Chrome版本号
Chrome版本号

按照Chrome的版本下载ChromeDriver,然后还需要将其安装到Python环境中。打开命令行界面,通过where python查询Python环境位置,将下载好的chromedriver.exe复制到Scripts文件夹中。

之后在命令行界面中通过chromedriver命令可查看ChromeDriver是否正常安装。若正常,则会出现如下类似输出:

代码语言:javascript
复制
Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port ****
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

签到部分

Selenium的一个好处是所有的操作都是直接运行再浏览器中,和真正的用户操作是一样的。因此就不需要设置伪装头文件了。

浏览器模拟
代码语言:javascript
复制
# 这部分用来设置运行时不显示浏览器窗口
chrome_options = Options()
chrome_options.add_argument("--headless")
# 模拟浏览器进行访问
browser = webdriver.Chrome(options=chrome_options)
browser.get("https://jksb.v.zzu.edu.cn/vls6sss/zzujksb.dll/first0")
进行签到
代码语言:javascript
复制
# 通过find_element_by_xpath来定位用户名和密码的输入框
browser.find_element_by_xpath("//*[@id='mt_5']/div[1]/div[3]/input").send_keys(uid)
browser.find_element_by_xpath("//*[@id='mt_5']/div[2]/div[3]/input").send_keys(pwd)

为了防止加载不完全的错误,可以设置time.sleep(2)来阻塞两秒等待加载。

通过以下代码可以获取到签到完成后的提示信息,用作之后的通知邮件的内容:

代码语言:javascript
复制
final_text = browser.find_element_by_xpath("//*[@id='bak_0']/div[2]/div[2]/div[2]/div[2]").text

邮件通知

签到后会通过邮件来告知我是否成功。

这里我用的是QQ邮箱:

代码语言:javascript
复制
def mail(mail_text, mail_to):
    # 设置邮件内容,用的是之前签到返回的提示信息
    msg = MIMEText(mail_text)

    # 设置邮件主题、发送方和接收方
    msg['Subject'] = "每日健康打卡通知"
    msg['From'] = MAIL_USER
    msg['To'] = mail_to

    # 发送邮件
    send = smtplib.SMTP_SSL("smtp.qq.com", 465)
    send.login(MAIL_USER, MAIL_PWD)
    send.send_message(msg)
    # 退出邮件
    send.quit()

私人信息

因这部分牵涉到了个人信息,我单独建了一个private_info.py来存储,并没有公开,故用户在使用时需要自行创建。内容如下:

代码语言:javascript
复制
MAIL_USER = "your-notice@email.address" # 用于发送通知的邮箱
MAIL_PWD = "your-authorization-code"	# 该邮箱的授权码

# 单用户
UID = "your-id"			# 学号
PWD = "your-password"	# 密码
MAIL_TO = "your-email"	# 接受通知的邮箱

# 多用户
users = list()
users.append(User("your-id", "your-password", "your-email"))

其中多用户添加账户信息时,使用的是自定义类User(),代码如下:

代码语言:javascript
复制
class User:
    uid = ""
    pwd = ""
    email = ""

    def __init__(self, uid, pwd, email):
        self.uid = uid
        self.pwd = pwd
        self.email = email

完整代码放在了Github上,如果读者有兴趣,不妨试一试。

任务定时

现在,程序本身已经支持定时了!

通过修改auto_sign.py中第72行代码中==后的数字就可以自定义时间了:

代码语言:javascript
复制
if now.hour == 6 and now.minute == 0:

代价就是程序必须一直运行着

作为补偿,我将编码修改为了GBK,这样可以运行在Linux服务器上了,通过以下命令即可:

代码语言:javascript
复制
nohup python auto_sign.py &

我看了几个Python实现的定时运行方法,感觉都不是很好。

在尝试了几种后,最终选择了使用Win10自带的“任务计划程序”。

任务计划程序
任务计划程序

单击右侧“创建基本任务”:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WPt40y8B-1597548429063)(C:\Users\lizw9\Pictures\Saved Pictures\创建基本任务.png)]

输入名称、描述后单击下一步,选择“每天”,开始时间我设置在了“06:00”。

之后选择“启动程序”,继续下一步。

接下来会到“启动程序界面”,在“程序或脚本”处选择自己的python环境所在位置,然后在“添加参数处”输入auto_sign.py的路径,如图所示:

启动成勋设置
启动成勋设置

继续“下一步”后,单击“完成”即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码部分
    • Selenium安装
      • 浏览器模拟
      • 进行签到
  • 签到部分
    • 邮件通知
      • 私人信息
      • 任务定时
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档