python+selenium实现疫情期间全自动打卡

文章目录

    • 前言
    • 问题分析
    • 网页源码分析与代码实现
      • 一、加载火狐驱动
      • 二、输入账号密码并提交
      • 三、进入打卡界面并点击左侧菜单栏
        • 1.iframe内元素的定位
        • 2.动态id/class的定位
      • 四、表格填写
      • 五、提交表格
    • 全部代码

前言

因为疫情缘故,学校搞了个每日限时打卡的系统,要求学生在每天0-9点完成当日体温和在京状况的打卡。就这样手动打卡了两个多月,北京还是迟迟不开学,目测开学已经要到5月底了。打卡期间忘过无数次,每次都被班长提醒,学校还往家长手机里发送作者没有打卡的短信,神烦。
于是乎,决定使用 定时开关机软件 + python 实现一个全自动定时打卡的脚本,省却我接下来一个月的劳神费力。
学校的打卡系统登录界面是这样的:
python+selenium实现疫情期间全自动打卡_第1张图片
这里是填写界面(左侧菜单栏需要依次点击数据采集和学生每日上报才能出现表格,否则是空白页面。表格很长,注意有纵向和横向滚动条)
python+selenium实现疫情期间全自动打卡_第2张图片


问题分析

手动操作时的步骤是这样的:
进入学生登录界面–>输入账号密码
–>进入填报界面–>点击左侧菜单栏–>点击数据采集–>点击学生每日上报
–>进入表格–>点击表格左下角“与昨日情况一致”
–>手动填写当日体温–>滑动横向滚动条–>手动填写当日在京情况(一直在京)

因此在使用selenium时,其大致步骤与上面描述的无二。


网页源码分析与代码实现

一、加载火狐驱动

selenium需要模拟打开浏览器,这里一般使用的浏览器驱动(Driver)是谷歌或者火狐,笔者先尝试了谷歌的驱动,发现在源码分析的时候效果不是很理想,于是用了火狐的。
(关于驱动的下载与安装,这里不做赘述,百度即可查看。)
驱动加载并进入后,脚本会自动根据当前的驱动打开对应的火狐浏览器,并链接到提供url的网页。

driver = webdriver.Firefox()  # 利用火狐浏览器
# 填写疫情上报系统的url
url = r"http://tb.bucea.edu.cn:8075/WebReport/ReportServer?op\=fs_load&cmd=fs_signin&_=1586929099201"
driver.get(url)
# 最大化浏览器窗体
driver.maximize_window()

二、输入账号密码并提交

想要实现填写指定数据并自动填写到对应的位置,或者点击按钮提交到对应位置,就需要通过网页的各种标签的id或者class来定位相对应的元素,学过web编程的同学应该比较好理解这点。
例如下面这段用于填写用户名的代码

<div class="fs-login-input fs-login-input-username">
    <input tabindex="1" class="fs-login-username" type="text" placeholder="用户名" title="用户名">
div>

我们可以看到,这部分的核心在于标签,此标签没有指定id,而是给了class,因此可以使用selenium提供的driver.find_element_by_class_name()方法,通过class的值来定位元素,进而调用send_keys()方法来实现数据填充。
类似的,对于“点击”操作,只需要获取