从 2 月开始,学校要求在学工系统进行疫情上报(每天报告体温等信息),尽管系统会自动帮忙填入昨天的数据,但每天都得登录、按一下“提交”,也得耗几十秒钟。且我记忆力并不出众,常常是收到辅导员“马上相逢无纸笔,凭君传语报平安,请您完成每日上报……”的短信之后,才掏起手机或者电脑完成上报。

  于是写一个自动脚本,实现一键上报。最初准备用 requests 库写的,但发现比较麻烦,于是改用 selenium.

  首先,去下载 Firefox 浏览器的驱动程序:

Releases · mozilla/geckodriver
WebDriver for Firefox. Contribute to mozilla/geckodriver development by creating an account on GitHub.

  不采用 Chrome 的原因是,chrome driver 对 Chrome 的版本要求实在太苛刻了……而当前版本的 Firefox driver 只要求 Firefox ≥60,所以可以长期用。

  下载下来之后,需要把 driver 放到一个 PATH 的目录里面。这里我往 PATH 环境变量新建了一个路径 C:\path,实际上直接放进 system32 文件夹也是可以的。

▲ 把 driver 放进 PATH 的目录之一

  然后安装 selenium:

conda install selenium

  最终脚本如下:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
import time

opt = Options()
# opt.add_argument('--headless')
browser = webdriver.Firefox(options=opt)

url = 'https://xg.hit.edu.cn/zhxy-xgzs/xg_mobile/xs/yqxx'

browser.get(url)
browser.find_element_by_id('username').send_keys('11********')
browser.find_element_by_id('password').send_keys('**********')
browser.find_element_by_id('casLoginForm').submit()


time.sleep(2)

browser.get(url)
time.sleep(2)

browser.execute_script('add()')

time.sleep(1)

browser.find_element_by_id('txfscheckbox').click()
browser.execute_script('save()')

browser.close()

  上面脚本在运行的时候,会在前台打开一个 Firefox ,填写用户名和密码、按下登录键、新建记录、填写记录、上报。

  如果想让脚本静默运行,就解除 opt.add_argument('--headless') 注释。