获取安卓手机验证码

需求

最近整理了以前写的东西,发出来给大家看看。主要是获取安卓短信验证码,又不想root手机,所以斟酌后选择了这种方式,不一定是最好的方法,但是可以解决问题,如果大家有更好的方式或者优化方法可以评论哦,一起进步呀~

实现方式

  1. 手机下载安装QPython软件,运行python代码(getverifycode.py)获取短信,将短信验证码保存在本地文件sms.txt中
  2. PC端用python读取文件中的内容提取出验证码
  3. 自动循环获取短信方式有两种:
    • getverifycode.py循环获取短信
    • 确认短信验证码已下发再调用UI自动化脚本触发获取短信(如:appium,这里就不介绍了)

具体代码

  1. 将以下代码放入安卓手机内,用QPython运行
from androidhelper import Android 
# import time

d = Android()
c = 0 # 已读短信数目
data = '' # 上一次读取的短信内容
# 循环读取短信,次数可根据实际情况设置,这里仅做一个示例
for i in range(1):
	# time.sleep(60) # 1分钟获取一次短信
    if c == d.smsGetMessageCount(False).result: 
    	# 如果没有短信或者没有收到新的短信就退出本次循环
        continue
    sms_data=d.smsGetMessages(False, 'inbox')   # 读取收件箱的短信,False读取所有,True读取未读短信
    list = sms_data.result
    for sms in list:
        if sms['body'] == data: 
        	# 如果当前短信内容等于上一次读取的内容,则退出本次循环
            continue
        elif '10086' in sms['address']: # 判断是否为目标号码发来的短信,以10086为例
            data = sms['body'] # 拿到短信内容
            # 将当前已读的收件箱短信条数保存,作为后续判断是否有收到新短信的依据
            c = d.smsGetMessageCount(False).result 
            with open('/storage/emulated/0/sms.txt','w') as f:
            	# 将短信内容写入文件,覆盖式写入
                f.write(sms['body']) 
            continue
        else:
        	pass
  1. 读取手机txt文件获取验证码
#coding=utf-8
import os,re

adb = 'adb shell cat /storage/emulated/0/sms.txt'
smsLog = os.popen(adb).readlines() # 执行adb指令,读取文件内容
_re = re.compile('\d{5}') # 正则匹配5个数字
code = _re.findall(smsLog[0]) # 匹配验证码
print(code[0]) # 验证码输出

参考文章:
用QPython读取手机短信并保存为csv文档
QPython接口文档

猜你喜欢

转载自blog.csdn.net/wzx77/article/details/107364888