解决验证码的问题无非就是几种方法:
1.让开发把验证码代码删掉
2.用万能验证码
3.写一个app,监听手机短信,把验证码放在文档里,再用python截取(神仙操作)
4.通过接口
5.手动输入验证码(那不是成半自动化了)
经过我的冥思苦想我想到了一个很简单的方法,就是把selenium和appium结合起来
思路:
1.首先配好移动端自动化环境
2.连接手机与电脑,别忘了打开appium(手机必须有sim卡,能收到短信,不然你测什么验证码)
3.写好在web端输入手机号,点击获取验证码的代码
4.重点来了,接着在web自动化代码写移动端代码,正常导包,添加手机和安装包信息,调起手机,运行短信,(注意:因为短信是系统app,下载不到安装包,所以在手机下载一个叫apk提取器的app,可以提取系统应用的安装包)
5.点开验证码,用uiautomatorviewer获取到验证码的值(可能会有一个坑,如果你的手机像小米一样,验证码都归在一起了,那就会出现一个页面有不止一个验证码,没办法定位,所以要注意的就是在运行代码之前把手机里其他的验证码删掉,这样定位就肯定是刚发来的验证码)
6.把刚获取到的值输入到web端的文本框里
代码:
#导包省略了
self.driver.find_element_by_xpath('手机号的xpath').send_keys('11111111111')
time.sleep(2)
self.driver.find_element_by_xpath('点击获取验证码的xpath').click()
#import os, sys
from appium import webdriver
desired_caps = {
'platformName': 'Android', # 设备系统
'deviceName': 'f0eb6a74', # 设备名称
'platformVersion': '9', # 设备系统版本
'appPackage': 'com.android.mms', # apk包名
'appActivity': 'com.android.mms.ui.MmsTabActivity' # apk的launcherActivity
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(2)
driver.tap([(796, 2027)])#以下为手机操作(每部手机分辨率不同,坐标不同)
time.sleep(10)
driver.tap([(620, 620)])#点击短信条目
time.sleep(3)
MmsCode = driver.find_element_by_id('com.android.mms:id/information_title2').text#获取短信验证码
time.sleep(2)
self.driver.find_element_by_xpath('//*[@id="vue"]/div/div[3]/input').send_keys(MmsCode)#在web端输入验证码
#学习笔记