欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

获取安卓手机验证码

程序员文章站 2022-12-21 07:59:23
需求:不root手机,获取安卓手机验证码实现方式:手机下载安装QPython软件,运行python代码将短信验证码保存在本地文件中PC端用python读取文件中的内容提取出验证码具体代码:将以下代码放入安卓手机内,用QPython运行from androidhelper import Android # import timed = Android()c = 0 # 已读短信数目data = '' # 上一次读取的短信内容# 循环读取短信,次数可根据实际情况设置,这里仅做一个...

需求

最近整理了以前写的东西,发出来给大家看看。主要是获取安卓短信验证码,又不想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接口文档

本文地址:https://blog.csdn.net/wzx77/article/details/107364888