最近疫情又严重了起来,学校要求每天都要上报我们的早、中、晚体温情况,但是我们居然被要求中午就提供全天的体温,这很明显是一个纯纯欺上瞒下的工程。

为了不每天浪费时间来扫码、填密码、按几个按键、再点提交(虽然不到一分钟的时间,但是有这么个东西真的很烦人!)我希望能用Python脚本能帮我自动完成这些琐事。

我们最好使用selenium中的webdriver,这个库中的函数可以模拟操作浏览器,非常方便。

1 from selenium import

然后我们使用如下方法进入你填报体温的网址

1 url='你的链接'
2 driver = webdriver.Edge()
3 driver.get(url)

 

首先我们找到自己的“填写的入口”,对我来说就是扫码的结果。

用python测人体体温 python自动报体温_Python

 

图1.填写信息的“入口”

用python测人体体温 python自动报体温_Python_02

 

 利用右键点击按钮,可以呼出一个窗口,下方点击检查可以查到对应的前端代码

用python测人体体温 python自动报体温_加载_03

 

 

 在控制台上会有高亮显示,但是最好不要使用class来对其定位,因为有些button同时使用同一个class,保险起见,最好还是使用xpath来定位

用python测人体体温 python自动报体温_解决方案_04

 

复制xpath之后,就可以使用find_element_by_xpath方法定位,并使用send_keys()来输入你需要输入的内容,比如学号或者密码

例如

1 driver.find_element_by_xpath("/html/body/app-root/app-right-root/rg-page-container/div/div[2]/div[2]/div[2]/div[2]/div/div/div[1]/app-login-normal/div/form/div[1]/nz-input-group/input").send_keys("你的学号")

对于一些需要点击的按键,selenium也可以使用click()进行模拟点击,例如

1 driver.find_element_by_xpath('//*[@id="fieldXQ-0"]').click()

 到此,整段代码的逻辑很简单,只是需要找到按键对应的xpath或者class,就可以将其定位,使用send_keys或者click可以模拟我们人类的一系列操作比如输入或者点击等,类似上述的代码一行一行的堆砌,就能够完成这项工作,但是在实际操作中,并不是如此顺利。我必须指出如下的问题:

1.代码执行的速度比网页加载的速度快,往往代码在执行,网页没有加载出来,导致程序一头雾水,找不到可工作的按钮路径,导致程序报错

2.在填表的过程中,有是否核酸这一选项,但是这种选项是根据当日情况而定的,不是日复一日相同的答案。

3.如果编写该网页的程序员,改动了调查内容,这个程序又会崩溃。


对于上面的问题,我做出了一些解决方案:

1.我们可以使用Python内置的time库,使用time.sleep方法将程序“暂停几秒”。

time.sleep(2)

看似解决了方法,但实际上这样的方法并不高明。如果加载的时间比你的预想要长呢?如果加载的时间更快呢?这不就造成了这行代码有种可有可无的境地?

我的解决方法是,不如编写一个while循环,使这段代码不断执行,直到网页加载出来,才能完成这项工作

2.我了解到,我们学校的核酸是每周二周五做一次核酸,这样就将问题解决的方法暴露出来了,我们可以使用datetime库,获取当前星期几

1 import datetime 
2day=datetime.date.today().isoweekday()

然后添加一个判断语句,如果今天是星期二或者星期五,填写是;如果是其他情况,填写否

1 if day == 2 or 5:
2         driver.find_element_by_xpath('//*[@id="fieldDESFHS-0"]').click()
3     else:
4         driver.find_element_by_xpath('//*[@id="fieldDESFHS-1"]').click()

但是最新的情况是,我们现在每天都要做核酸,这样更好,省了几行代码:)

3.第三种情况没什么好说的,请使用try/except语句判断程序是否执行成功,如成功,打印“mission runs smoothly”;如失败,则打印“something wrong”。看到这条消息就乖乖地去修改程序吧:(

在这整个程序编写完之后,使用pyinstaller将其打包成可执行的exe文件,然后丢到Windows系统的自动执行任务,定点执行。至此,你彻底摆脱了这一麻烦事!

文章结尾,我想说点不足之处,我真希望能挂到什么服务器或者网站上,因为我的电脑总不能一直开着,电脑不开机就不能自动执行,这是我的一大痛点。还有要是能程序报错或者不能执行,能将报错信息或者运行成功与否的提示通过邮件发送到我手机上使我得知,会更好。