Python编写自动打卡 python脚本自动打卡_Python编写自动打卡

坐标某带专,学校日常要求每天打卡,而且要在8点前打卡,万一睡过头的话估计一睁眼就是辅导员在群里咆哮了,所以开始学习selenium打算搞一个一键打卡的脚本出来。

先考虑一下需要有什么步骤吧:1. 在特定时间打开并进入健康打卡网页.2. 定位输入框位置,并输入账号密码 3. 进入打卡页面  4. 定位需改变选项框,并将框中内容选为绿码  5. 提交 6. 设置开关,防止重复打卡,自动关闭计算机等。

 

需要用到这些函数,从selenium模块中导入

Python编写自动打卡 python脚本自动打卡_用户名_02

接下来要注意的是,在开始爬网页之前,要先安装相应浏览器webdriver,

例如我使用的是Edge,在Microsoft Edge WebDriver - Microsoft Edge Developer直接下载安装,并且记住安装位置。

接下来打开需要访问的网页:

Python编写自动打卡 python脚本自动打卡_表单_03

#s = Service(r"【刚刚安装的webdriver.exe的位置】")
#driver.get('需要访问的网页的url')

在这里先试运行一下以上6行吧(以baidu为例):

1 from selenium import webdriver
2 from selenium.webdriver.common.by import By
3 from selenium.webdriver.chrome.service import Service
4 
5 s = Service(r"D:\Application\edgedriver_win32\msedgedriver.exe")
6 driver=webdriver.Edge(service=s)
7 driver.get('https://www.baidu.com/')

运行以上代码后会自动打开URL为https://www.baidu.com/的网页,同样的,也可以这样打开别的页面,比如打卡系统......

Python编写自动打卡 python脚本自动打卡_Python编写自动打卡_04

好了现在已经完成第一步了,接下来需要达成的目的是:将用户号和密码输入到那个框里面,然后点击【进入健康状况上报平台】。

F12进入开发者模式,观察页面源代码:

Python编写自动打卡 python脚本自动打卡_表单_05

我们爬网页时需要了解一下html,html是一种用于创建网页的标准标记语言,web开发常用的前端语言,HTML 教程 | 菜鸟教程 (runoob.com),在浏览器的开发者模式中可以直接看到网页源码。

定位到用户号输入框的name属性为“uid”,同理密码输入框的name=“upw”,【进入】按钮的name=”submit“。

idinputbox=driver.find_element(By.NAME,"uid") #定位账号(学号)输入框
pwinputbox=driver.find_element(By.NAME,"upw") #定位密码输入框
LoginButton=driver.find_element(By.NAME,"smbtn") #定位"进入健康状况上报平台"按钮

idinputbox.send_keys('【用户名】')  #输入用户名
pwinputbox.send_keys('【密码】')   #输入密码
LoginButton.click()   #点击按钮,进入下一界面

现在已经登入打卡系统了,接下来的操作跟上边差不多。

Python编写自动打卡 python脚本自动打卡_表单_06

 定位“本人填报”按钮的位置,并点击:

reportbutton=driver.find_element(By.XPATH,'//*[@id="bak_0"]/div[11]/div[3]/div[4]')  #这里是通过Xpath定位的,在源代码中点击要定位的元素右键可以直接复制该元素的Xpath
reportbutton.click()  #点击按钮

接下来按照预想应该是进入下一界面了,但是这里会报错,

Python编写自动打卡 python脚本自动打卡_表单_07

 

说定位不到,这是因为“本人填报”元素实际上是处在一个嵌套的表单中,需要先找到该元素所在的frame表单,定位这个表单,跳转到这个表单,上面两行代码可以修改如下:

xf=driver.find_element(By.ID, "zzj_top_6s")
driver.switch_to.frame(xf)

reportbutton=driver.find_element(By.XPATH,'//*[@id="bak_0"]/div[11]/div[3]/div[4]')  #这里是通过Xpath定位的,在源代码中点击要定位的元素右键可以直接复制该元素的Xpath
reportbutton.click()  #点击按钮

driver.switch_to.default_content()#切换回主文档

在解决frame表单嵌套导致定位失败的问题时参考了这篇文章:https://www.jianshu.com/p/83087c24ab19

然后就进入最后一个页面了。

Python编写自动打卡 python脚本自动打卡_表单_08

定位和点击提交表格,方法和上一步骤一样。

终于可以半夜12点之前睡觉了。

但是仅此而止的话意味着如果想要这个程序发挥作用,我还得在12点后打开电脑然后......再让它自己打卡。突然想起来一个笑话,一人卖跳蚤药,招牌上写出“卖上好蚤药”。问:“何以用法?”答曰:“捉住跳蚤,以药涂其嘴,即死矣。”

最后一步,把程序加到任务计划库里

Python编写自动打卡 python脚本自动打卡_Python编写自动打卡_09

设置触发时间为12点15分,并且在代码的末尾加上关机函数,电脑保持待机,打完卡直接关机

os.system('shutdown /s /t 0') #关机

 啊,终于可以睡觉了。

感觉这操作好傻啊,不过以后可以试试干点别的...