脚本思路:在页面点击【获取验证码】按钮后,监控日志,通过日志拿到验证码,从而完成登录
PS:手机为oppo r11
#coding=utf-8
'''
Created on 2018年5月16日
@author: Administrator
'''
from appium import webdriver
import os,time
def strat():
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['deviceName'] = 'HMKNW17727005211'
desired_caps['unicodeKeyboard'] = True
desired_caps["resetKeyboard"] = True
desired_caps['appPackage'] = 'XXXXXX'
desired_caps['appActivity'] = 'XXXXXX'
driver = webdriver.Remote(command_executor = 'http://127.0.0.1:4723/wd/hub',desired_capabilities = desired_caps)
time.sleep(2)
return driver
def logcat(): #获取日志函数
cmd_c = 'adb logcat -c'
os.popen(cmd_c) #清除以前的日志
for i in range(30): #30秒没有短信日志抛ValueError
try:
cmd_d = 'adb logcat -d | findstr codeString'
value = os.popen(cmd_d).read() #获取刚刚的短信验证码哪一行日志信息
code = value.split('验证码:')[1].split(',')[0]
break
except:
pass
time.sleep(1)
else:
raise ValueError
return code
def login(driver,phone = u'18888888888'):
driver.implicitly_wait(20)
driver.find_element_by_id('com.tanbeixiong.tbx_android:id/iv_login_phone').click()
driver.find_element_by_id('com.tanbeixiong.tbx_android:id/et_login_phone_number').send_keys(phone)
driver.find_element_by_name('获取验证码').click()
try:
code = logcat()
print code
except ValueError:
return False
driver.find_element_by_id('com.tanbeixiong.tbx_android:id/et_login_input_verify_code').send_keys(code)
driver.find_element_by_name('登录').click()
try:
driver.implicitly_wait(10)
driver.find_element_by_name('昵称')
return True
except:
return False
if __name__ == '__main__':
driver = strat()
Boole = login(driver)
print Boole