首页 > 编程语言 >Python实现企业微信上下班自动打卡程序

Python实现企业微信上下班自动打卡程序

时间:2024-03-08 14:33:19浏览次数:26  
标签:cn Python 微信 adb https 打卡 Android

一、介绍

在写了这么多手机端自动化测试程序后,基于使用的uiautoamtor2,最近,我突然想用Python尝试自动打开企微在上下班时间打卡操作,今天我就来分享一下我的经验和总结。

二、技术原理

要想通过Python控制手机APP,目前主要技术如下。

2.1、Android体系

在Android中,官方有一个叫adb的东西,俗称Android 调试桥 (adb)

​Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作,例如安装和调试应用。

 https://developer.android.com/tools/adb?hl=zh-cn

adb.png

目前很多Python库的实现都是基于底层adb来实现的,常用的有appium,uiautoamtor2库

appium和uiautoamtor2的区别

Appium和UIAutomator2都是用于自动化测试移动应用程序的工具,但它们在一些方面有所不同:

  1. 底层技术

    • Appium:是一种跨平台的移动应用程序自动化工具,它使用WebDriver协议来与移动设备通信,从而实现对iOS和Android应用程序的自动化测试。它可以使用多种编程语言(如Java、Python、JavaScript等)进行编写测试脚本。
    • UIAutomator2:是Google提供的用于Android平台的自动化测试框架。它是Android Testing Support Library的一部分,能够直接与Android系统交互,因此可以提供更多的系统级别的操作和功能。
  2. 支持平台

    • Appium:支持iOS和Android平台,可以在不同的设备和操作系统版本上运行。
    • UIAutomator2:仅支持Android平台,不能用于iOS应用程序的自动化测试。
  3. 定位策略

    • Appium:可以使用多种定位策略,包括XPath、ID、名称、类名等。
    • UIAutomator2:使用基于Android UI层次结构的定位策略,可以直接定位应用程序中的UI元素。
  4. 性能和稳定性

    • 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次)

android1.png

3.2.2、开启USB调试模式

设置-系统和更新-开发人员选项

android2.png

3.2.3、保持唤醒状态

大部分手机都有锁屏密码,导致自动化程序运行时需要解锁屏幕失败。

共3种方案:

  1. 开发者模式里设置保持唤醒状态,则屏幕一直常亮,不会锁屏,等不调试程序的时候再关闭即可。
  2. 取消屏幕锁屏密码
  3. 将锁屏密码直接写入代码里

为了演示方便,我直接选择1,让屏幕不休眠。

android3.png

3.2.4、选择USB配置

USB连接电脑时,不要选择仅充电,要选择文件传输模式

android4.png

在控制台输入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的使用。

不过以上程序只是抛砖引玉,还有很多可以优化的地方。例如:

  1. 怎么实现定时调度打卡?
  2. 怎么实现打卡时间随机范围,例如一直在8:30至9:00之间,避免一个固定的时间点打卡被人发现?
  3. 怎么处理节假日不打卡的情况?
  4. 打卡成功或失败,怎么进行通知到自己?

各位看官,如对你有帮助欢迎点赞,收藏。如需继续更新该打卡程序的请关注公众号,联系作者更新哟~

如需要源码请关注公众号【Python魔法师】,后台回复“企微打卡”即可获取源码程序和文档。

qrcode.jpg

标签:cn,Python,微信,adb,https,打卡,Android
From: https://www.cnblogs.com/meet/p/18060711

相关文章

  • python字典存入csv
     存入csvimportcsvfromconfig.globalparameterimportexecl_saveimportcsvtitle='这是一个标题'price=23.45deal=5location='广东广州'province='广东'city='广州'shop='门店'result=1#构建商品信息字典pr......
  • python-Django基础学习笔记
    (由于笔记来自本地的Typora,图片未能上传,文章内容并不完整)路由器配置初始Django-创建/结构/配置settingsURL定义/视图函数路由配置path、re_pathpython-mvenv"名字"#下载Django环境pipinstalldjango==2.2.2-ihttps://pypi.douban.com/simple#激活虚拟环境D:......
  • Python 第三方库安装国内镜像汇总
    Python第三方库安装国内镜像汇总: 清华大学: https://pypi.tuna.tsinghua.edu.cn/simple阿里云: http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中科技大学: http://pypi.hustunique.com/山东理工大学: http://pyp......
  • aiofiles,一个异步测试的 Python 库!
    什么是aiofiles库?aiofiles是一个异步文件操作库,提供了一种简单而强大的方式来执行文件操作,包括打开文件、读取文件、写入文件等。aiofiles库是建立在asyncio之上的,它允许开发人员在异步程序中执行文件操作,而不会阻塞事件循环。安装aiofiles库pipinstallaiofiles基本......
  • python版本简易阿里云ddns
    importosimportsysfromdatetimeimportdatetimefromalibabacloud_alidns20150109.clientimportClientasDNSClientfromalibabacloud_tea_openapiimportmodelsasapi_modelsfromalibabacloud_alidns20150109importmodelsasdns_modelsimportrequestsclassDDN......
  • python3代码转换成docker镜像启动
    1.打包成docker镜像来使用切到Tags,搜索3.11选择python:3.11.4-slim-bullseye2.在压测脚本的根目录中,创建Dockerfile文件: FROMpython:3.11.4-slim-bullseyeWORKDIR/opt/appCOPYrequirements.txt./ENVhost=nullENVport=nullENVonlyResetJob=nullRUNpip......
  • 第101天-python-flask简介
    1.flask1.1、flask简介Flask简介:Flask诞生于2010年,是用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。其WSGI工具箱采用Werkzeug(路由......
  • python进行数据下钻的简单测试——非正式版
    具体代码//这个是全国地图下钻到省市地图,我这里以湖南长沙为例:chart_d3a639f3511c48ba8020864474f8950d.on('click',function(param){varselected=param.name;if(selected){switch(selected){......
  • python基础快速入门(二)
    数据类型:Python中常见的数据类型包括数字(int、float、complex)和字符串。python的数值类型会自动转换,相对灵活,整数(int):例如,在32位机器上,整数的位数为32位,取值范围为-2**31到2**31-1,(4个G,)在64位系统上,整数的位数为64位,取值范围为-2**63到2**63-1。长整数(long):Python中......
  • Python魔法:20个让你编程事半功倍的奇淫技巧(建议收藏)
    Python作为一门灵活、充满技巧的语言,有着很多奇技淫巧,今天小编就跟大家分享一下在平时工作中所积累的技巧,这里面既有语法上的技巧,也有库函数的应用,可以帮助大家在平时的工作中提升效率,规避某些错误,一起来看看吧。列表推导式字典推导式使用zip进行并行迭代使用enumerate获......