python怎么通过手机号定位_python通过手机号获取微信男女性别

不用图像识别,就可以拿到微信性别。

先上一张图片,

3163ad91e0824347a2b423167c76e621.jpg

通过红框里的小头像可以看出是男是女,或者未知。

我们可以通过判断头像来获取性别,识别男女。

但是太麻烦和复杂了。

其实我们可以通过界面元素进行拾取当前性别

首先打开安卓的界面层级拾取工具    一般位于安卓sdk包下tools下      的uiautomatorviewer.bat

546de047b03e46bfbcd7d58118461dbb.jpg

我们发现根本不需要通过图像识别,就轻而易举的拿到性别了。

这是手动获取的,那我们怎样自动获取呢。

我们可以通过程序进行获取,

比如 appium自动化测试工具,adb命令,android自动化测试Uiautomator框架 等。。

首先appium 需要配置很多环境,Uiautomator框架要在android里实现。

而adb命令比较通用,python调用adb也很方面。

那我们就用adb写自动获取代码。

通过uiautomatorviewer.bat我们拿出当前的xml代码

(点击uiautomatorviewer界面上左上角水平第四个按钮保存即可)

当前页面的全部xml代码(经过格式化以后的排版,默认是一行):

包含所要信息的一行xml的代码:

发现 性别在  content-desc="男" 这个地方  ,

一共有三种状态

1   content-desc="男"

2   content-desc="女"

3   就是 连这个xml源码也没有  ,也就是对方性别未知的意思。

全部的xml源码都是以node为节点,我们要做的就是匹配出    男 女 未知

那我们首先要找寻到上面那一行xml部分源码

也就是找到包含   resource-id="com.tencent.mm:id/anl" 为基准的节点,包含在

为什么不直接去匹配 男 女这种字眼呢?

原因是姓名和地区中可能包含 男 女 字眼,我们要准确匹配。

所以我们先找到包含resource-id="com.tencent.mm:id/anl"的这一行,

因为resource-id="com.tencent.mm:id/anl"在全部的xml代码中是唯一的,

再从这一行中拿出性别,那就很准确了。

现在思路就是:

1 首先获取手机设备

2 电脑端使用python程序通过adb命令控制手机

3 拿出手机端的页面

4 进行匹配并打印

开始我们的编写我们的代码:

import os,re

# 获取所有的手机设备

def getDevicesAll():

devices = []

try:

for dName_ in os.popen("adb devices"):

if "\t" in dName_:

if dName_.find("emulator") < 0:

devices.append(dName_.split("\t")[0])

devices.sort(cmp=None, key=None, reverse=False)

except:

pass

print(u"\n设备名称: %s \n总数量:%s台" % (devices, len(devices)))

return devices

# 导出手机端当前页面元素

def export(devices_name):

# 页面xml保存到手机存储

step1 = os.popen('adb -s {0} shell uiautomator dump /sdcard/{1}.xml'.format(devices_name,devices_name)).read()

if step1.find('UI') != -1:

print(devices_name+'\txml写进手机存储成功')

# 页面xml从手机存储推送到电脑,和当前运行程序同级

os.popen('adb -s {0} pull /sdcard/{1}.xml '.format(devices_name,devices_name))

print(devices_name+"\txml推送到电脑成功")

with open(devices_name + ".xml",encoding="utf-8") as f:

res = f.read()

return res

else:

print(devices_name+"\txml写进手机存储失败")

return "null"

# 匹配函数

def check_line(res,find_str):

list1 = re.findall( ']*?>', res)

if list1:

return list1[0]

return "null"

def main():

# 以resource-id为基准进行匹配

findstr = 'resource-id="com.tencent.mm:id/anl"'

devices = getDevicesAll()

for d_name in devices:

res = export(d_name)

if res!="null":

result = check_line(res,findstr)

if result=="null":

print("此手机号性别未知")

elif result.find("男") != -1:

print("此手机号性别男")

elif result.find("女") != -1:

print("此手机号性别女")

if __name__=="__main__":

main()

主要代码就是上面的,

getDevicesAll函数获取所有连接电脑的usb手机设备,拿到设备名字

export函数获取当前连接的手机的页面

check_line函数拿到准确的一行,拿不到说明是未知性别

main函数进行逻辑判断等

我提供的主要是思路以及主要代码。

那些adb输入手机号,点击搜索,返回,重新搜索一系列操作都很简单,

就不啰嗦了。还有很多设备同时搜索控制进行识别手机号等,需要你们自己完成。

不过主要代码已经在上面了。你们进行自己定制更改即可。

对了,有的电脑上可能没有adb工具,百度一下adb安装等字眼,配置一下就好了。

转发请备注博主链接。

欢迎进(Q)群,帮你解决问题:

e83632b8746246709ed6afe35b173e8a.jpg

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值