讀取手機驗證碼,這里利用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()