目录

一、主要功能的实现

二、功能实现所使用的模块

三、 具体实现内容

1.登录并跳转到上报页面

2.打开开发者工具并设置edge浏览器传感器

3.刷新后点击上报

4.通过SMTP向邮箱发送执行情况

四、部署到服务器端

1.部署本地服务器

2.部署云端服务器


钉钉健康打卡、钉钉自动打卡

一、主要功能的实现

  1. 登录账号
  2. 点击页面
  3. 填写体温
  4. 点击上报
  5. 执行完成后,发送邮箱通知
  6. 部署云服务器,后台自动执行

二、功能实现所使用的模块

  1. time
  2. win32api
  3. win32con
  4. pynput
  5. selenium
  6. smtplib
  7. MIMEText

win32api、win32con、pynput模拟控制鼠标键盘,不要问我为啥不用一个库(本来只用一个好好的,后来传到服务器里就不行了,只好两个模块都用了)

selenium驱动Edge浏览器,需要下载Edge的driver驱动

smtplib和MIMEText就是负责邮件的收发了,这里我用的是QQ邮箱,需要在自己邮箱内开启SMTP功能,还有QQ邮箱的SMTP服务器。

三、 具体实现内容

不要在意为啥有那么多的time.sleep(),这里不追求效率,考虑网速和服务器辣鸡等原因,多等会儿稳健一点。

1.登录并跳转到上报页面

主要通过selenium的find_element(By._)定位

driver = webdriver.Edge()   #创建一个edge实例
driver.maximize_window()    #最大化页面
driver.get("学校OA登录页面.html")  #OA系统登陆页面
time.sleep(2)#通过find_element(By._)定位输入框和登录的button按钮,并输入账号密码登录
driver.find_element(By.ID,"name").send_keys("123456") #输入账号
time.sleep(2)
driver.find_element(By.ID,"password").send_keys("123456") #输入密码
time.sleep(2)
driver.find_element(By.ID,"submit_login").click() #点击登录
time.sleep(3)
driver.find_element(By.LINK_TEXT,"服务中心").click() #点击服务中心
time.sleep(3)
driver.find_element(By.XPATH,"//*[@id='commonService']/ul/li[2]").click()#点击学生健康上报
time.sleep(3)
driver.switch_to.window(driver.window_handles[1])
time.sleep(2)

2.打开开发者工具并设置edge浏览器传感器

到这里就用到了pynput的鼠标和键盘控制了,写了一个move_mouse()后面直接调用就行(屎山代码) ,在简道云官方文档中有写到,定位字段只能在移动端进行,所以这里需要模拟鼠标操作打开开发者工具,进行设备仿真,并需要使用到Edge浏览器的sensors传感器用来模拟GPS定位,要不然上报的时候显示的是服务器的地址,这里我用的服务器是腾讯位于上海的服务器。

对于此段代码中需要模拟键盘的地方,方法在这里[搬运]Python中模拟键盘输入常见键位编号对照表_奕隆的博客-CSDN博客

def move_mouse():global mousemouse = Controller()time.sleep(2)mouse.position = (1510, 52)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)mouse.position = (1283, 644)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)mouse.position = (1028, 810)mouse.press(Button.left)mouse.release(Button.left)time.sleep(5)mouse.position = (1033, 134)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)mouse.position = (1489, 126)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)mouse.position = (1342, 334)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)mouse.position = (1043, 206)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)mouse.position = (1041, 194)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)mouse.position = (1145, 678)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)mouse.position = (1145, 628)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)#经度win32api.keybd_event(51, 0, 0, 0)    #3win32api.keybd_event(51, 0, win32con.KEYEVENTF_KEYUP, 0)   #释放指令win32api.keybd_event(52, 0, 0, 0)    #4win32api.keybd_event(52, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(110, 0, 0, 0)    #.win32api.keybd_event(110, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(49, 0, 0, 0)    #1win32api.keybd_event(49, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(54, 0, 0, 0)    #6win32api.keybd_event(54, 0, win32con.KEYEVENTF_KEYUP, 0)time.sleep(2)mouse.position = (1150, 740)mouse.press(Button.left)mouse.release(Button.left)time.sleep(2)win32api.keybd_event(49, 0, 0, 0)    #1win32api.keybd_event(49, 0, win32con.KEYEVENTF_KEYUP, 0)   #释放指令win32api.keybd_event(49, 0, 0, 0)    #1win32api.keybd_event(49, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(50, 0, 0, 0)    #2win32api.keybd_event(50, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(110, 0, 0, 0)    #.win32api.keybd_event(110, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(56, 0, 0, 0)    #8win32api.keybd_event(56, 0, win32con.KEYEVENTF_KEYUP, 0)win32api.keybd_event(52, 0, 0, 0)    #4win32api.keybd_event(52, 0, win32con.KEYEVENTF_KEYUP, 0)

3.刷新后点击上报

time.sleep(3)
win32api.keybd_event(116, 0, 0, 0)    #8
win32api.keybd_event(116, 0, win32con.KEYEVENTF_KEYUP, 0)
#刷新一下然后继续执行
#中间重新加载time.sleep(2)
mouse.position = (482, 560)
mouse.press(Button.left)
mouse.release(Button.left)
'''
#刷新
time.sleep(5)
mouse.position = (106, 46)
mouse.press(Button.left)
mouse.release(Button.left)
#确定
time.sleep(5)
mouse.position = (849, 154)
mouse.press(Button.left)
mouse.release(Button.left)
'''

在刷新后会显示仿真移动端的页面,这时候模拟手机将页面向下滑动到最低端,点击体温的上报框填写体温,并点击上报按钮(不要在意注释掉的代码为啥不删,因为删了....运行不出来啊

【Python】selenium自动化打卡相关推荐

  1. python自动化办公都能做什么菜-python+selenium自动化(一)之环境搭建

    一.环境选择 python版本:python3.7(64位)下载地址:https://www.python.org/downloads/ (推荐使用官方下载) selenium版本:selenium3 ...

  2. Python+selenium 自动化-mac下安装配置chrome驱动方法

    我的 Python 版本有两个,先通过 which 看一下对应版本的位置. 然后找到 python 安装目录里的 bin 文件夹,把对应的驱动放里面就好了. 如果不知道怎么匹配对应 chrome 版本 ...

  3. Python+selenium 自动化-基本环境搭建,调用selenium库访问百度查询天气实例演示

    Python+selenium 自动化 第一章:基本环境搭建 ① 安装 selenium 库 ② 下载对应版本的浏览器驱动 ③ 调用百度查天气演示 第一章:基本环境搭建 ① 安装 selenium 库 ...

  4. Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示

    我们可以用 excel 来记录自动化,然后读取 excel 来执行命令,excel 可以很方便直观的管理我们录入的自动化.下面给大家演示一下 Python+selenium 自动化的实例,读取 exc ...

  5. Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”

    文章目录 一.模拟登录"中国铁路网12306 1.引入库 2.初始化 3.将点选验证码图片,通过人工打码,返回目标像素位置(json格式). 4.点选验证码位置得到后,需要鼠标左击进行模拟人 ...

  6. Python+selenium自动化八大元素定位方法及实例(超详细)

    目录 一.selenium模块中的find_element_by_id方法无法使用 二.Python+selenium自动化八大元素定位方法 使用场景: 1.通过id属性定位:driver.find_ ...

  7. php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博

    首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...

  8. chrome 控制台信息获取 python_【python+selenium自动化】设置Chrome启动参数

    起因:直接用selenium的webdriver启动chrome,会弹出"Chrome正在受到自动软件的控制",并且窗口较小,是因为chrome没有加载任何配置 解决:点进sele ...

  9. python+selenium自动化软件测试(第2章)

    目录 2.1 操作元素基本方法 2.1.1 打开网页 2.1.2 设置休眠 2.1.3 页面刷新 2.1.4 页面切换 2.1.5 设置窗口大小 2.1.6 截屏 2.1.7 退出 2.1.8 加载浏 ...

  10. python+selenium自动化软件测试

    1.1 环境搭建 1.1.1 selenium简介 Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测 ...

最新文章

  1. 双指针问题最简单的教程(1)
  2. 计算机毕业论文过程管理手册,毕业论文过程管理手册(修改)-陈亚琴.doc
  3. fastboot因为连接线影响出错
  4. 【Django】安装及配置
  5. NOIP 2015 提高组 Day2
  6. js点击按钮改变字体大小并给他颜色_如何在Elementor中修改文本的字体、大小、颜色、样式...
  7. Vmware虚拟机不能使用键盘的解决方法
  8. loadrunner java 环境_java应用程序及服务器优化过程及loadrunner测试效果
  9. python画spc控制图_手把手教你SPC控制图怎么做以及SPC控制图分类
  10. Mathematica图像处理
  11. 深度解析Eureka的自我保护机制
  12. tomcat的夏时令问题(时区问题)
  13. PMI-ACP练习题(22)
  14. 如何在iphone上模拟定位
  15. 相机PHP,C/C++、C#、PHP相机开发实例 大恒相机SDK
  16. SIwave仿真手册——软件基础(一)
  17. ERP、CRM、SCM、BPM、DSS... ...这10种主流的B端产品你都知道吗?
  18. 【代码实现】数学游戏:最后一个说30就输的数学游戏
  19. UE、UI、 IA和IxD傻傻分不清
  20. Jquery项目中使用vue.js和element-ui

热门文章

  1. 【Android UI】贝塞尔曲线 ⑦ ( 使用 德卡斯特里奥算法 公式计算的 方法绘制三阶贝塞尔曲线示例 )
  2. 在本地计算机无法启动T3产品服务,T3标准版提示未启动产品服务,在系统服务里面启动T3产品服务提示无法启动,是什么情况...
  3. 京东敏捷软件开发套路
  4. python创建icon图标
  5. Windows CE 5.0 for VMWare虚拟机和BSP下载
  6. git命令-1.基础教程
  7. 如何徎序放到计算机桌面,win系统如何把“我的电脑”放到桌面上
  8. ubuntu 20使用kubeadm安装k8s 1.26
  9. Cocos 资料大全
  10. 打新盛宴结束,HT未来之路如何?