Python实现企业微信自动打卡程序一:基础上下班打卡 |
您所在的位置:网站首页 › ios企业微信自动打卡 › Python实现企业微信自动打卡程序一:基础上下班打卡 |
一、介绍
在写了这么多手机端自动化测试程序后,基于使用的uiautoamtor2,最近,我突然想用Python尝试自动打开企微在上下班时间打卡操作,今天我就来分享一下我的经验和总结。 二、技术原理要想通过Python控制手机APP,目前主要技术如下。 2.1、Android体系在Android中,官方有一个叫adb的东西,俗称Android 调试桥 (adb) Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作,例如安装和调试应用。 https://developer.android.com/tools/adb?hl=zh-cn 目前很多Python库的实现都是基于底层adb来实现的,常用的有appium,uiautoamtor2库 appium和uiautoamtor2的区别Appium和UIAutomator2都是用于自动化测试移动应用程序的工具,但它们在一些方面有所不同: 底层技术: Appium:是一种跨平台的移动应用程序自动化工具,它使用WebDriver协议来与移动设备通信,从而实现对iOS和Android应用程序的自动化测试。它可以使用多种编程语言(如Java、Python、JavaScript等)进行编写测试脚本。 UIAutomator2:是Google提供的用于Android平台的自动化测试框架。它是Android Testing Support Library的一部分,能够直接与Android系统交互,因此可以提供更多的系统级别的操作和功能。支持平台: Appium:支持iOS和Android平台,可以在不同的设备和操作系统版本上运行。 UIAutomator2:仅支持Android平台,不能用于iOS应用程序的自动化测试。定位策略: Appium:可以使用多种定位策略,包括XPath、ID、名称、类名等。 UIAutomator2:使用基于Android UI层次结构的定位策略,可以直接定位应用程序中的UI元素。性能和稳定性: Appium:由于是跨平台的,因此可能在某些情况下性能略低于UIAutomator2。此外,由于Appium需要使用WebDriver协议与移动设备通信,可能会导致一些性能和稳定性问题。 UIAutomator2:作为Android官方提供的测试框架,通常可以提供更好的性能和稳定性,特别是在与Android系统进行交互时。这里,我们采用uiautoamtor2来实现。具体原理就是Python代码中使用uiautoamtor2库通过adb连接到Android手机,然后uiautoamtor2实现打卡企业微信,点击应用,点击打卡。最后点击屏幕实现打卡操作。 三、环境准备在进行自动打卡操作之前,需要确保环境准备完备,包括安装必要的软件和配置相关的环境变量,以确保程序能够正常运行。 3.1、在电脑上安装ADB工具,并配置环境变量通过在https://developer.android.com/tools/adb?hl=zh-cn页面中,根据页面中文提示,进行安装ADB,然后记得一定配置ADB的环境变量。 我的环境变量配置 # Android SDK export ANDROID_HOME=/Users/find/android/android-sdk-macosx当安装并配置完成后,在控制台输入adb,如果出现如下信息表示adb环境配置完成 ➜ ~ adb Android Debug Bridge version 1.0.41 Version 29.0.6-6198805 Installed as /Users/find/android/android-sdk-macosx/platform-tools/adb 3.2、手机设置为了使自动打卡程序能够顺利执行,需要在手机上进行一些设置,如开启开发者模式、USB调试等,以便将手机连接到计算机并进行操作。将手机通过USB数据线连接到电脑 3.2.1、开启Android手机的开发者模式设置-关于手机-系统版本(点击系统版本5次) 3.2.2、开启USB调试模式设置-系统和更新-开发人员选项 3.2.3、保持唤醒状态大部分手机都有锁屏密码,导致自动化程序运行时需要解锁屏幕失败。 共3种方案: 开发者模式里设置保持唤醒状态,则屏幕一直常亮,不会锁屏,等不调试程序的时候再关闭即可。 取消屏幕锁屏密码 将锁屏密码直接写入代码里为了演示方便,我直接选择1,让屏幕不休眠。 3.2.4、选择USB配置USB连接电脑时,不要选择仅充电,要选择文件传输模式 在控制台输入adb devices,来获取已经连接到的手机设备id ➜ ~ adb devices List of devices attached SNU0220A15007866 device记住这个SNU0220A15007866,它相当于你手机的唯一识别码,接下来会用到。 四、代码编写编写自动打卡程序的关键是编写代码,通过Python编程语言结合uiautomator2库来实现自动化操作,包括登录企业微信、定位打卡按钮、模拟点击等功能的实现。 新建Python,并安装uiautoamtor2库,pip install uiautomator2 (venv) ➜ qw_punch_card pip install uiautomator2 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting uiautomator2 Using cached https://pypi.tuna.tsinghua.edu.cn/packages/5f/b9/7607bd0512d266336929b80006ef2eeef870d978a16427d052215ec5c809/uiautomator2-2.16.25-py3-none-any.whl (3.1 MB) Collecting six Using cached https://pypi.tuna.tsinghua.edu.cn/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting Pillow Using cached https://pypi.tuna.tsinghua.edu.cn/packages/4f/d3/5b5682b498805c06b900cdd778b649a4132162b17da674a1fef56da56a77/pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl (3.5 MB) Collecting requests>=2 Using cached https://pypi.tuna.tsinghua.edu.cn/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl (62 kB) Collecting lxml>=4.3 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/97/a8/92d88fe22b8caccdb0c1ff099e5ef90052b058b42671e69986e2262faa1f/lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl (4.8 MB) |██████████████████▌ | 2.8 MB 1.2 MB/s eta 0:00:02 新建punch_card.py文件 获取企微PackageName和ActivityName package_name = "com.tencent.wework" activity_name = "com.tencent.wework.launch.LaunchSplashActivity"连接到设备 d = u2.connect("SNU0220A15007866") 打开应用 # 企业微信应用包信息 package_name = "com.tencent.wework" activity_name = "com.tencent.wework.launch.LaunchSplashActivity" # 打开应用 print(d.info) d.app_stop(package_name) d.app_start(package_name, activity_name, wait=True)打开工作台 print("启动企业微信成功") d(text=u"工作台").click() 上班打卡这里假设上班打卡时间是8-9点 if 8 < datetime.now().hour < 9: if d(text=u"你已在打卡范围内").info['text'] == "你已在打卡范围内": print("现在是上午") d(text=u"上班打卡").click() time.sleep(3) print(f"{TimeUtil.curr_date()} : 上班打卡成功") 下班打卡这里假设下班打卡时间是18-19点 if 18 < datetime.now().hour < 19: if d(text=u"你已在打卡范围内").info['text'] == "你已在打卡范围内": print("现在是下午") d(text=u"下班打卡").click() time.sleep(3) print(f"{TimeUtil.curr_date()} : 下班打卡成功")打卡完成后,退出企业微信,返回桌面 # 返回桌面 time.sleep(1) os.popen("adb shell input keyevent 3") time.sleep(1) os.popen("adb shell am force-stop com.tencent.wework") time.sleep(1) 总结通过以上代码,就实现了自动上下班打卡操作,本文主要介绍了adb和uiautoamtor2的使用。 不过以上程序只是抛砖引玉,还有很多可以优化的地方。例如: 怎么实现定时调度打卡? 怎么实现打卡时间随机范围,例如一直在8:30至9:00之间,避免一个固定的时间点打卡被人发现? 怎么处理节假日不打卡的情况? 打卡成功或失败,怎么进行通知到自己?各位看官,如对你有帮助欢迎点赞,收藏。如需继续更新该打卡程序的请关注公众号,联系作者更新哟~ 如需要源码请关注公众号【Python魔法师】,后台回复“企微打卡”即可获取源码程序和文档。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |