读取手机验证码,这里利用appium的text识别,读取最新的短信信息,我这个测试机是红米的note7
1,首先获取当前短信app的Activity等信息:
adb -s 89afc4e9 shell dumpsys window | findstr mCurrentFocus
2,识别短信apk的信息如下:
mCurrentFocus=Window{2291615 u0 com.android.mms/com.android.mms.ui.MmsTabActivity}
3,在python脚本中,启动app:
def get_driver(self): \'\'\'获取driver\'\'\' self.desired_caps = {} self.desired_caps[\'platformName\'] = \'Android\' # 平台 self.desired_caps[\'platformVersion\'] = \'9.0\' # 系统版本 self.desired_caps[\'appPackage\'] = \'com.android.mms\' # APK包名 self.desired_caps[\'appActivity\'] = \'.ui.MmsTabActivity\' # 被测程序启动时的Activity self.desired_caps[\'unicodeKeyboard\'] = \'true\' # 是否支持unicode的键盘。如果需要输入中文,要设置为“true” self.desired_caps[\'resetKeyboard\'] = \'true\' # 是否在测试结束后将键盘重轩为系统默认的输入法。 #self.desired_caps[\'60\'] # Appium服务器待appium客户端发送新消息的时间。默认为60秒 self.desired_caps[\'deviceName\'] = \'89afc4e9\' # 手机ID self.desired_caps[\'noReset\'] = True # true:不重新安装APP,false:重新安装app self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.desired_caps) return self.driver
4,识别最新短信内容:
5,输出text内容,通过睁着表达式,提取出数字验证码:
pattern = re.compile(r\'(?<=您的验证码为:)\d+\.?\d*\') code = re.findall(pattern, ele.text)
6,此时输出的内容格式是list的,需要转成string型的:
string_code = "".join(code)
7,然后通过write函数,将内容写到本地文档:
def write(self, path, text): f = open(path, mode=\'w\', encoding=\'utf-8\') f.write(text) f.close()
综合一下,脚本如下:
# coding:utf-8 from appium import webdriver import re import time class driver_configure(): def get_driver(self): \'\'\'获取driver\'\'\' self.desired_caps = {} self.desired_caps[\'platformName\'] = \'Android\' # 平台 self.desired_caps[\'platformVersion\'] = \'9.0\' # 系统版本 self.desired_caps[\'appPackage\'] = \'com.android.mms\' # APK包名 self.desired_caps[\'appActivity\'] = \'.ui.MmsTabActivity\' # 被测程序启动时的Activity self.desired_caps[\'unicodeKeyboard\'] = \'true\' # 是否支持unicode的键盘。如果需要输入中文,要设置为“true” self.desired_caps[\'resetKeyboard\'] = \'true\' # 是否在测试结束后将键盘重轩为系统默认的输入法。 #self.desired_caps[\'60\'] # Appium服务器待appium客户端发送新消息的时间。默认为60秒 self.desired_caps[\'deviceName\'] = \'89afc4e9\' # 手机ID self.desired_caps[\'noReset\'] = True # true:不重新安装APP,false:重新安装app self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.desired_caps) return self.driver def write(self, path, text): f = open(path, mode=\'w\', encoding=\'utf-8\') f.write(text) f.close() if __name__ == \'__main__\': dc = driver_configure() dr = dc.get_driver() ele = dr.find_element_by_id("com.android.mms:id/subject") print(ele.text) pattern = re.compile(r\'(?<=您的验证码为:)\d+\.?\d*\') code = re.findall(pattern, ele.text) print(code) string_code = "".join(code) dc.write(\'D:/smslog.txt\', string_code) time.sleep(3000) print("quit") dr.quit()