钾肥喵的窝

我在 CODING 部署的 Hexo 博客

0%

再战健康打卡|Datetime库及try:except:的使用

重构一时爽, 构错火葬场
重构的起因是因为有一天任务计划程序显示0X1但并没有收到邮件, 很显然, 由于忽忽悠的采用了比肩国际一流游戏厂商的极为先进的生物(土豆)供电服务器, 导致经常出现难以预料的情况(喂, 明明是你的脚本鲁棒性不够好嘛).

开搞之前

首先分析需求.

之前的脚本发送的邮件中并没有最后打卡时间, 又由于鲁棒性的不足, 导致并不能完全通过收到邮件来判断是否成功打卡.

同样, 之前的脚本并没有对异常情况的处理机制(没错, 我就是能卡你半个小时), 导致出现异常时不能收到邮件反馈.

时间获取

历史填报会打开新的标签页, 所以就需要切换标签页.

1
2
3
4
# 获取当前浏览器的所有标签页
tabs = driver.window_handles
# 定位到第二个标签页
driver.switch_to.window(tabs[1])

接下来就是老套路, 定位元素, 获取值, Xpath走起.

1
table = WebDriverWait(driver, 180).until(EC.presence_of_element_located((By.XPATH, '//*[@id="countTableBody"]/tr[1]/td[1]')))

那么如何获取当前时间呢? 我们可以使用datetime库.

1
today = datetime.datetime.now()

时间处理

datetime库中提供了一些函数来对时间进行处理, 比如从字符串中提取时间, 将时间转换为字符串.

1
2
3
4
today = datetime.datetime.now()
today_date = today.strftime("%Y-%m-%d")
newest_time = datetime.datetime.strptime(table.text, "%Y-%m-%d %H:%M:%S")
newest_date = newest_time.strftime("%Y-%m-%d")

异常处理

通过try-except语句可以实现对异常状况的处理, 首先执行try下的语句块, 如果出现异常就跳转执行except下的语句块.

既然做了异常处理, 就没有必要设置1800s的延迟了, 调成180s以示对极为先进的生物供电服务器的尊敬.

完整代码

这里对敏感信息做了模糊处理, 请根据实际情况自行替换。