Python钉钉打卡程序

Python自动打上下班卡程序

    • 本程序所用到的库和工具
      • 库:
      • 工具及环境:
    • 代码实现:
      • 源码:
  • 说明
    • 使用方法

本程序所用到的库和工具

库:

	import uiautomator2 as u2		//主要库
	import time						//延时
	import os						//可使用系统命令,增加可操作性

工具及环境:

  1. 环境搭建:
    安装adb:从谷歌官网下载Android Platform Tools Android Platform Tools,解压,并加包含adb.exe的目录加入到系统的PATH中。
    安装python-uiautomator2:

    pip install --pre -U uiautomator2
    

    设备安装atx-agent:
    首先设备连接到PC,并能够adb devices发现该设备。

    从github下载atx-agent文件,并推送到手机。在手机上安装包名为com.github.uiautomator的apk

    $ python -m uiautomator2 init
    

    success
    最后提示success,代表atx-agent初始化成功

  2. python-uiautomator2 封装了谷歌自带的uiautomator2测试框架,提供便利的python接口。他允许测试人员直接在PC上编写Python的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率;
    python-uiautomator2主要分为两个部分,python客户端,移动设备
    python端: 运行脚本,并向移动设备发送HTTP请求,
    移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转 化成uiautomator2的代码。
    整个过程在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听。
    在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
    移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作;

  3. 连接手机
    两种连接方式:
    WIFI:

    import uiautomator2 as u2
    d = u2.connect('192.168.0.100')
    

    USB:

    import uiautomator2 as u2
    d = u2.connect_usb('123456f')
    
  4. uiautomatorviewer,是Android SDK内置工具,用来获取APP控件元素,但是运行 uiautomator2的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重。故借助网上大神 @codeskyblue 开发的weditor。
    weditor调用python-uiautomator2的两个接口screenshot和dump_hierarchy这样就不会有冲突问题了。
    安装
    weditor:

    pip install --pre weditor
    

    success后运行weditor

    python -m weditor
    

    之后浏览器会自动打开一个网页 http://atx.open.netease.com (通过Devices ID或局域网IP即可连接成功)
    连接成功后就可以在weditor开启的网页进行APP控件的获取,该工具还提供了代码生成功能,是测试人员注重于业务逻辑而不将时间耗费在代码上。

代码实现:

  1. 因为钉钉属于混合开发,很多页面属于web页面,通过weditor或者uiautomatorviewer都无法获取web页面元素,只能通过Xposed 强制开启Android webview debug模式,这种方法暂时不多讨论。在此我使用weditor,通过相对比例进行模拟操作,达到预期效果。
    Python钉钉打卡程序_第1张图片

源码:

  1. 上班卡:
    	# -*- coding: utf-8 -*-
    	# @Time    : 18-12-4 下午17:43
    	# @Author  : Merlin
    	# @Email   : [email protected]
    	# @File    : daka.py
    	# @Software: PyCharm
    	import uiautomator2 as u2
    	import time
    	print ('***********************')
    	print ('\nAuthor:Merlin\n')
    	print ('***********************')
    	print ('\n正在连接设备,请等待...\n')
    	d = u2.connect()
    	print('\n正在启动钉钉...\n')
    	d.app_start('com.alibaba.android.rimet')
    	time.sleep(20)
    	print ('打卡成功,退出APP')
    	d.app_stop('com.alibaba.android.rimet')
    
  2. 下班卡:
    	# -*- coding: utf-8 -*-
    	# @Time    : 18-12-4 下午17:43
    	# @Author  : Merlin
    	# @Email   : [email protected]
    	# @File    : daka.py
    	# @Software: PyCharm
    	import uiautomator2 as u2
    	import time
    	import os
    	print ('***********************')
    	print ('\nAuthor:Merlin\n')
    	print ('***********************')
    	
    	print ('\n正在连接设备,请等待...\n')
    	d = u2.connect()
    	try:
    		d.app_stop('com.alibaba.android.rimet')
    	except:
    		print ('未运行钉钉!\n')
    	print('\n正在启动钉钉...\n')
    	d.app_start('com.alibaba.android.rimet')
    	time.sleep(20)
    	d(resourceId="com.alibaba.android.rimet:id/home_bottom_tab_icon", className="android.widget.ImageView", instance=1).click()
    	d.drag(0.5,0.7,0.5,0.1,0.5)
    	time.sleep(10)
    	d.click(0.135, 0.65)
    	#d.click(0.131, 0.731)
    	time.sleep(10)
    	
    	d.click(0.497, 0.631)
    	d.click(0.172, 0.639)
    	try:
    		time.sleep(5)
    		d.click(0.773, 0.55)
    		print ('打卡成功,关闭钉钉')
    		time.sleep(5)
    		d.app_stop('com.alibaba.android.rimet')
    	except:
    		print ('打卡失败!')
    		d.app_stop('com.alibaba.android.rimet')
    

说明

使用方法

  1. 通过PC连接手机,在PC上建立基本任务,触发器设置为时间触发(上下班打卡时间),可以触发事件是使用 python.exe 启动脚本,也可以使用pyinstaller 将脚本打包成exe文件,基本任务直接启动exe就可以。

  2. 这是我第一次使用Markdown,也是第一次写技术博客,本身的代码能力就很弱,想着做这些小玩意提升自己的技术和能力。欢迎有更多有想法想交流的小伙伴留言或联系我。

Mail:[email protected]

你可能感兴趣的:(提升自己)