点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

一腔热血勤珍重,洒去犹能化碧涛。


最近微信“拍一拍”火遍了各大微信群,并迅速占据了热搜话题榜

于是我突发奇想,决定用pyhton自动实现微信“拍一拍”,没想到还真给搞成功了,整个过程才用了30行代码,下面给大家介绍一下具体实现步骤:


本文亮点

用appium模拟操控手机并截图,通过图像识别定位好友头像坐标,最后用appium模拟双击头像坐标,以此实现“拍一拍”功能。


效果展示:

具体步骤:

一、用appium操控手机

关于appium的安装及使用方法,之前已经写过很多了,这里就不再赘述了,直接进入操作步骤

1.用python打开微信,代码如下

desired_caps = {"platformName": "Android","deviceName": "VOG-AL00","appPackage": "com.tencent.mm","appActivity": ".ui.LauncherUI","noReset": "true","fullReset": "false"}
server = 'http://localhost:4723/wd/hub'
driver = webdriver.Remote(server, desired_caps)

难点在于desired_cap参数的配置,这里再给大家介绍一下:

  • platformName:表示设备操作系统
    deviceName:表示设备名称
    apppackage:表示app程序包名
    appActivity:表示app入口Activity名。

将手机连接电脑,打开开发者模式,运行此程序,就会发现手机自动打开了微信。

二、模拟双击头像

1.原理介绍

我们都知道,微信“拍一拍”是通过双击好友头像实现的,如下图所示:

想要双击头像,就要先获得头像在屏幕中的坐标

这里给大家介绍1个函数:

基于Python-opencv2的目标定位模块:Aircv
使用其find_template函数,可以查找目标图像在原始图像中的坐标范围,用法如下:

def matchImg(imgsrc, imgobj, confidencevalue=0.7): imsrc = ac.imread(imgsrc)imgobj = ac.imread(imgobj)match_result = ac.find_template(imsrc, imgobj,confidencevalue) return match_result

其中imgsrc=原始图片路径,imgobj=待查找的目标图片路径。
如果未找到,则match_result=None;
若找到,则返回如下数据:

{'result':(570.0, 2771.0), 'rectangle': ((30, 1601), (30, 3941), (1110, 1601), (1110,3941)), 'confidence': 0.999999463558197}

其中:

  • result为匹配图片在原始图片上的中心坐标点,也就是我们要找的点击点;

  • rectangle为匹配图片在原始图像上四边形的坐标;

  • confidence为匹配相似率。


2.那么该如何在程序中自动获取获取好友头像坐标呢?

在客户端appium中,可以确定头像在屏幕中的像素为140×140
我们可以先把好友头像保存,再用ps把头像改为此像素。

然后在程序中创建1个while循环,在第一步完成的基础上,手动进入好友聊天框(其实也可以通过识别好友头像自动进入)

通过appium对手机屏幕截图并命名为src.png,将其和头像路径(obj.png)导入1中的检测函数:

driver.save_screenshot('src.png')
imgsrc='src.png'
imgobj='obj.png'
match_result=matchImg(imgsrc, imgobj)

若返回None,则说明聊天窗口没检测到好友头像,继续循环;

若检测到头像坐标,则解析返回的坐标数据,用for循环模拟双击坐标位置:

if match_result is not None:result = [match_result['rectangle'][0], match_result['rectangle'][3]]for i in range(2):driver.tap(result,100)print('拍成功')
else:print('没找到头像')

这样就大功告成了

是不是很简单?

小结:本文介绍了用python模拟微信“拍一拍”的主要思路,感兴趣的可以接着做下去,实现一些有趣的功能,例如,监控微信群聊,谁发消息就“拍”谁一下,或者把群聊用户挨个拍一遍,都挺有意思的。

本文所述的代码及数据已上传至【python的爬虫与数据分析之路】后台,请输入拍一拍获取。

------------------- End -------------------

往期精彩文章推荐:

  • 手把手用Python教你如何发现隐藏wifi

  • 手把手教你用Python做个可视化的“剪刀石头布”小游戏

  • 手把手教你使用Python库打造一款简易黑客工具

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两个您使用过的Python库~~

30行python代码实现微信“拍一拍”相关推荐

  1. 30行python代码实现微信自动陪女盆友聊天(itchat-uos + 无限制调用)

    先放代码: 再放个文字的(方便复制): import itchat import requestsdef get_reply(keyword):try:url = f"https://ope ...

  2. 30 行 python 代码清理微信中重复的缓存文件

    微信和 QQ 都有一个存放缓存文件的文件夹,微信在设置 --> 文件管理,QQ 在系统设置 --> 基本设置 --> 文件管理 --> 打卡个人文件中找到它,平时大家对这个文件 ...

  3. 30行python代码设计_30行Python代码实现3D数据可视化

    原标题:30行Python代码实现3D数据可视化 作者:潮汐 来源:Python技术 欢迎来到 编程教室~ 我们之前的文章中有讲解过不少 Matplotlib 的用法,比如: 之前我们基本都是用它来绘 ...

  4. 王者荣耀——bat批处理文件,自动刷金币版(脱胎于30行Python代码刷金币版),Windows双击即可运行!

    参考<30行Python代码刷王者荣耀金币>:https://segmentfault.com/a/1190000012520431 1.源代码 以下是源代码部分,全部复制到文本文档, 用 ...

  5. 如何用python破解热点_用30行Python代码制作wifi万能钥匙,邻居家wifi网速好快

    原标题:用30行Python代码制作wifi万能钥匙,邻居家wifi网速好快 当我们拖着疲惫的身体下班回到家,想开开心心的吹着空调风扇吃着西瓜,然后手机连上wifi打一把游戏好好舒服下,然而家里wif ...

  6. c语言微信挑一挑编程,100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  7. 100行python代码做一个程序_100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  8. 30行Python代码,打造一个微信群聊助手~

    大家都知道,最近代码君迷上了Python,一直在研究这门语言,还是那句话,人生苦短,我学Python,今天代码君要教大家一个黑科技,30行代码实现自己定制的微信群聊助手,这个助手有什么用呐,就是用来活 ...

  9. 30行Python代码实现蚂蚁森林自动偷能量

    虽然我支付宝加了好多好友,平时有很多能量可以偷,但由于太懒,至今一棵树都没种成,所以心心念念把偷能量这事自动化.之前通过用代码模拟手机点按的方式,实现了 朋友圈自动点赞,但当时蚂蚁森林的操作流程要比朋 ...

最新文章

  1. 如果只推荐一本 Python 进阶的书,我要 Pick 它!
  2. 数学建论文模标准模板
  3. Linux进程管理与调度-之-目录导航【转】
  4. java把字体做成滚动的_Scroll text - JS实现文字自动循环滚动效果
  5. mysql之创建数据库,创建数据表
  6. java servlet init方法_Servlet详解之两个init方法的作用
  7. Java序列化技术性能分析(JDK原生与Protostuff)
  8. Word 2007 目录生成技巧
  9. 《图论及其应用》学习笔记(图和简单图)
  10. 3分钟快速了解,如何一次通过CISSP考试?
  11. STM32利用DCMI对并口ADC高速数据采样
  12. 《机器人爱好者(第1辑)》——机器人和人工智能
  13. jetson nano运行darknet_ros的环境配置
  14. 拼团系统开发|全民拼购商业模式解读
  15. Base64编码/解码原理及实现
  16. 【机器学习】树模型预剪枝和后剪枝
  17. MyBatis中获取Oracle序列
  18. EndeavourOS安装配置全攻略!
  19. Navicat安装及pj
  20. 无线呼叫服务器怎么恢复出厂,TP-Link TL-WR841N怎么恢复出厂设置?

热门文章

  1. Python Bisect
  2. C语言郝斌视频学习一 变量为什么要初始化和一个小例子以及大纲笔记
  3. Ce6-Hydrazide 二氢卟吩-酰基 Ce6-PEG-Hydrazide
  4. 金山WPS97使用技巧(转)
  5. 家用投影仪哪款好?哪个品牌的投影仪比较好
  6. 我的JavaScript回顾之路_08—0227—支付密码输入框/弹性布局flex
  7. 同一界面画出多个QQ图(R语言)
  8. 基于Python的微博大数据舆情分析,舆论情感分析可视化系统
  9. 带注释的参考线python可视化_带的解释|带的意思|汉典“带”字的基本解释
  10. 文体用品与科技杂志文体用品与科技杂志社文体用品与科技编辑部2023年第5期目录