python3基于uiautomator2实现钉钉自动打卡.docx
- 文档编号:17372501
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:11
- 大小:56.01KB
python3基于uiautomator2实现钉钉自动打卡.docx
《python3基于uiautomator2实现钉钉自动打卡.docx》由会员分享,可在线阅读,更多相关《python3基于uiautomator2实现钉钉自动打卡.docx(11页珍藏版)》请在冰豆网上搜索。
python3基于uiautomator2实现钉钉自动打卡
python3基于uiautomator实现钉钉自动打卡
1、思路
首先开启钉钉中的极速打卡功能,然后利用python3+uiautomator2,在上下班时间启动钉钉apk即可。
2、使用说明
电脑必须有python3的环境,python3、python3、python3…重要的事情说三遍。
。
。
手机安装微信,登录自己的微信小号
USB线连接手机,dos窗口运行,python-muiautomator2init
运行成功的标志:
手机中安装一个名称为ATX的apk,打开后点击“启动”
在config.txt填写上班下班时间,微信号,打卡APP账户、密码信息,自动化脚本都自动读取
一切准备好后,双击start_AutoClock.bat,执行自动化打卡
3、自动化脚本运行流程
1.定时判断是否到上下班时间
2.到预期时间后,执行启动apk,循环启动3次,确保执行了极速打卡
3.每次在dd界面等待30秒,给dd执行极速打卡功能
4.3次循环完成后,启动dd后,在打卡通知界面截图
5.在文件管理中找到截图,微信(自己的微信小号)分享打卡截图给微信好友(自己的微信大号)
3.1config.txt文件,填写自己的信息
start_AutoClock.bat(windows下双击执行批处理)
#!
/usr/bin/envpython
#-*-coding:
utf-8-*-
#@Time:
2019/06/1116:
34
#@Author:
huangpeng
#@Site:
#@File:
AutoClock.py
#@Software:
PyCharm
importunittest
importtime
importsys
importuiautomator2asu2
importlogging
logging.basicConfig(level=logging.INFO,format='%(asctime)s-%(name)s-%(levelname)s-%(message)s')
logger=logging.getLogger(__name__)
d=u2.connect()
#d=u2.connect('192.168.1.239')
#打开文本文件
fp=open('config.txt','r')
#使用readlines读取
lines=fp.readlines()
config={}
forlineinlines:
#将读取的每行内容过滤掉换行符,如果不加这个条件,输入的内容中将会添加换行符\n
line=line.strip('\n')
ss=line.split('=')#将每行内容根据=分割
config[ss[0]]=ss[1]
fp.close()
————————————————
classTest(unittest.TestCase):
defsetUp(self):
self.watcherson()
print('d.watchers')
print("----------SetUp-----\n")
deftearDown(self):
d.watchers.remove()
print("-----------TearDown----\n")
defwatcherson(self):
d.watcher(u'注意').when(text=u'你在此次选择后可以到“手机管理-权限管理”中修改此项设置').click(text=u'允许',className='android.widget.Button',resourceId='android:
id/button1')
d.watcher(u'无响应').when(text=u'关闭应用').click(text=u'关闭应用',className='android.widget.Button')
d.watchers.run()
pass
deftest_autoclockout(self):
#下班打卡
logger.info("检查时间是否到下班时间")
whileTrue:
time1=config["下班起始时间"]#起始下班时间(启动ddapk时间)
time2=config["下班终止时间"]#终止时间
now1=time.strftime("%H%M%S")#一定要在while循环中才会实时更新为当前时间
ifint(time2)>int(now1)>int(time1):
#定时执行app
logger.info("到下班时间")
self.test_autoclock()#进入dd应用,进行极速打卡
time.sleep
(1)
self.test_WeChatMsgsnd()#打开微信分享打卡截图
break
deftest_autoclockin(self):
#上班打卡
logger.info("检查时间是否到上班时间")
whileTrue:
time1=config["上班起始时间"]#起始下班时间(启动ddapk时间)
time2=config["上班终止时间"]#终止时间
now1=time.strftime("%H%M%S")#一定要在while循环中才会实时更新为当前时间
ifint(time2)>int(now1)>int(time1):
#定时执行app
logger.info("到上班时间")
logger.info("进入dd")
self.test_autoclock()#进入dd应用,进行极速打卡
time.sleep
(1)
self.test_WeChatMsgsnd()#打开微信分享打卡截图
break
deftest_WeChatMsgsnd(self):
time.sleep(3)
self.test_lock()
time.sleep
(1)
logger.info("打开dd")
d.app_start("com.alibaba.android.rimet")#打开dd
time.sleep(5)
logger.info("截图")
d.screenshot("Screenshot.jpg")
time.sleep
(2)
d.push("Screenshot.jpg","/sdcard/0pics/")
time.sleep
(2)
logger.info("退出dd")
d.app_stop("com.alibaba.android.rimet")
time.sleep
(1)
d.press("home")
time.sleep
(1)
logger.info("打开文件管理器")
d.app_start("com.qiku.android.filebrowser")
time.sleep
(2)
whileTrue:
logger.info("检查是否在文件夹初始界面")
ifd(resourceId="com.qiku.android.filebrowser:
id/storage_name").exists:
logger.info("在文件夹初始界面,进入文件夹")
d(resourceId="com.qiku.android.filebrowser:
id/storage_arrows").click()
time.sleep
(1)
logger.info("进入保存图片文件夹")
d(resourceId="com.qiku.android.filebrowser:
id/file_name").click()
time.sleep
(1)
logger.info("长按图片")
d.long_click(0.348,0.219)
time.sleep
(1)
logger.info("分享")
d(text=u"分享").click()
time.sleep(3)
logger.info("选分享对象")
d(text=u"发送给朋友").click()
time.sleep
(1)
logger.info("选择朋友")
d(resourceId="com.tencent.mm:
id/b98").click()
time.sleep(0.5)
d(resourceId="com.tencent.mm:
id/b98").clear_text()
time.sleep(0.5)
d(resourceId="com.tencent.mm:
id/b98").set_text(config["自己微信大号名称"])
time.sleep(0.5)
d(resourceId="com.tencent.mm:
id/qm").click()
time.sleep(0.5)
logger.info("点击发送")
d(resourceId="com.tencent.mm:
id/b00").click()
time.sleep(7)
d.press("home")
logger.info("息屏")
d.screen_off()#息屏
break
else:
logger.info("不在文件夹初始界面,返回继续检查是否在初始界面")
d.press("back")
time.sleep
(1)
deftest_autoclock(self):
#进入dd应用,进行极速打卡
logger.info("检查解手机屏幕锁")
self.test_lock()#判断是否需要屏幕解锁
whileTrue:
logger.info("判断是否在手机初始桌面")
ifd(text=u"拨号").exists():
#判断是否在手机初始桌面
logger.info("在手机初始桌面")
time.sleep
(1)
logger.info("打开dd")
d.app_start("com.alibaba.android.rimet")#打开dd
time.sleep(3)
logger.info("判断是否需要登录")
ifd(resourceId="com.alibaba.android.rimet:
id/btn_next").exists():
#判断是否需要登录
logger.info("需要登录")
self.test_login()#执行登录dd账户
logger.info("登录成功")
logger.info("等待30秒极速打卡时间")
time.sleep(30)
logger.info("退出dd")
d.app_stop("com.alibaba.android.rimet")#退出dd
time.sleep
(2)
forcountinlist(range(1,3)):
logger.info("进入dd,执行极速打卡")
d.app_start("com.alibaba.android.rimet")#打开dd
logger.info("等待30秒极速打卡时间")
time.sleep(30)
logger.info("退出dd")
d.app_stop("com.alibaba.android.rimet")#退出dd
time.sleep
(1)
logger.info("息屏")
d.screen_off()#息屏
else:
logger.info("不需要登录,执行极速打卡")
logger.info("等待30秒极速打卡时间")
time.sleep(30)
logger.info("退出dd")
d.app_stop("com.alibaba.android.rimet")#退出dd
time.sleep
(2)
forcountinlist(range(1,3)):
logger.info("进入dd,执行极速打卡")
d.app_start("com.alibaba.android.rimet")#打开dd
logger.info("等待30秒极速打卡时间")
time.sleep(30)
logger.info("退出dd")
d.app_stop("com.alibaba.android.rimet")#退出dd
time.sleep
(1)
logger.info("息屏")
d.screen_off()#息屏
break
else:
logger.info("不在手机初始桌面,返回继续检测是否在初始桌面")
d.press("back")
time.sleep
(1)
deftest_login(self):
#登录dd账号
logger.info("输入账号")
time.sleep
(1)
d(resourceId="com.alibaba.android.rimet:
id/et_phone_input").click()
time.sleep(0.5)
d(resourceId="com.alibaba.android.rimet:
id/et_phone_input").clear_text()#这里是清除指定元素的内容
time.sleep(0.5)
d(resourceId="com.alibaba.android.rimet:
id/et_phone_input").set_text(config["钉钉账号"])#这里是在指定元素中输入dd账号
time.sleep(0.5)
logger.info("输入密码")
d(resourceId="com.alibaba.android.rimet:
id/et_pwd_login").click()
d(resourceId="com.alibaba.android.rimet:
id/et_pwd_login").clear_text()#这里是清除指定元素的内容
time.sleep(0.5)
d(resourceId="com.alibaba.android.rimet:
id/et_pwd_login").set_text(config["钉钉密码"])#这里是在指定元素中输入dd密码#
time.sleep(0.5)
logger.info("登录")
d(resourceId="com.alibaba.android.rimet:
id/btn_next").click()
deftest_lock(self):
#解锁手机屏幕
d.screen_on()
logger.info("判断手机是否在锁屏状态")
ifd(resourceId="com.android.systemui:
id/notification_stack_scroller").exists():
#判断手机是否在锁屏状态
logger.info("锁屏状态,执行解锁")
d.swipe_points([(0.485,0.708),(0.481,0.286)],0.05)#滑动解锁界面
time.sleep
(1)
logger.info("判断是否存在图案锁")
ifd(resourceId="com.android.systemui:
id/lockPatternView").exists():
#判断是否存在图案锁
logger.info("存在,需要解图案锁")
d.swipe_points([(0.777,0.539),(0.509,0.691),(0.777,0.694),(0.512,0.853),],0.05)#解九宫图案锁(需要修改自己的图案锁坐标)
time.sleep
(1)
else:
logger.info("不存在,滑动解锁成功")
else:
logger.info("手机未锁屏不用解锁")
if__name__=='__main__':
Test=Test()
Test.test_autoclockout()
Test.test_autoclockin()
3.2备注:
AutoClock.py是使用360N5手机适配,其他手机可能需要轻微的修改
可以支持解图案锁,但要根据实际手机情况修改图案坐标位置,也可以不设置图案锁
需开启钉钉极速打卡功能,开启极速打卡、开启极速打卡、开启极速打卡……
将AutoClock.py、start_AutoClock.ba和config.txt放在同一个目录下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python3 基于 uiautomator2 实现 自动 打卡