微信“拍一拍”,竟然可以使用Python实现 |
珠江路在线
2020年6月23日
【
转载
】 编辑:
|
本文标签: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参数的配置,这里再给大家介绍一下:
将手机衔接电脑, 打开开发者模式,运行此程序,就会发现手机自动 打开了微信 。
二、 模仿双击头像
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}
其中:
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 模仿微信“拍一拍”的重要思路,有兴趣的 能够接着做下去,实现一些 乏味的 性能,例如,监控微信群聊,谁发 信息就“拍”谁一下,或者把群聊消费者挨个拍一遍,都挺故意思的 。