使用Python实现微信拍一拍功能的思路代码


Posted in Python onJuly 09, 2020

使用Python实现微信拍一拍功能的思路代码

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

使用Python实现微信拍一拍功能的思路代码

于是我突发奇想,决定用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.原理介绍

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

使用Python实现微信拍一拍功能的思路代码

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

这里给大家介绍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模拟微信“拍一拍”的主要思路,感兴趣的可以接着做下去,实现一些有趣的功能,例如,监控微信群聊,谁发消息就“拍”谁一下,或者把群聊用户挨个拍一遍,都挺有意思的。

到此这篇关于使用Python实现微信"拍一拍"的思路详解的文章就介绍到这了,更多相关python 微信拍一拍内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
Python对象体系深入分析
Oct 28 Python
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
Python命令启动Web服务器实例详解
Feb 23 Python
Python将图片转换为字符画的方法
Jun 16 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
python 梯度法求解函数极值的实例
Jul 10 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
Sep 20 Python
python 发送邮件的四种方法汇总
Dec 02 Python
python四种出行路线规划的实现
Jun 23 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
pytorch 多分类问题,计算百分比操作
Jul 09 #Python
详解Python 循环嵌套
Jul 09 #Python
keras分类之二分类实例(Cat and dog)
Jul 09 #Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 #Python
Python2.x与3​​.x版本有哪些区别
Jul 09 #Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 #Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 #Python
You might like
php miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP中用hash实现的数组
2011/07/17 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
thinkphp3.2实现上传图片的控制器方法
2016/04/28 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
JavaScript 加号(+)运算符号
2009/12/06 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
JS鼠标滚动分页效果示例
2017/07/05 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
学习node.js 断言的使用详解
2019/03/18 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
Python2.x与Python3.x的区别
2016/01/14 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
Python os模块常用方法和属性总结
2020/02/20 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
python如何为list实现find方法
2022/05/30 Python
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers