本篇文章主要讲述的是如何自动获取短信验证码和如何自动获取图片验证码,并写入到对应的输入框中(以下均使用微博的找回密码作为示例)
获取短信验证码的方法有三种,如下所示:
在手机的通知栏中获取短信内容
通过监控手机日志获取短信验证码
通过redis获取短信验证码
以下只写出第一种在通知栏中获取短信内容的方法,后续两种方法会在后面进行分享。
获取图片验证码的方法:
通过百度的OCR文字识别,进行识别获取图片中的字母、文字或数字验证码。
一、获取短信验证码
方法:发送短信验证码后,打开手机的通知栏,定位短信内容,将定位到的内容填入到验证码输入框中,核心代码为:
# 打开手机通知栏
self.driver.open_notifications()
# 获取定位短信内容(封装了元素定位,详细操作可见上一篇PO模式封装的博客)
message = self.find_element(self._message_content)
# 将短信内容转换为text文本
message_content = message.text
# 通过正则匹配短信内容中的验证码(使用r前缀可以自动转义,不需要手动转换字符串,6表示6位数字的验证码)
ver_code = re.findall(r'[\\d]{6}', message_content)
# 关闭通知栏(下面方式为点击手机返回键来关闭通知栏)
self.driver.press_keycode(4)
# 自动填入验证码(将获取到的验证自动填入到验证码输入框中)
self.input_verification_code(ver_code)
注意:由于我的类中继承了BasePage类,而BasePage类中声明driver是属于WebDriver库(WebDriver库属于Selenium框架),而以上代码中调用的open_notifications()和press_keycode()方法是属于webdriver库(webdriver库属于appium框架),所以需要在该类中导入webdriver类,并在类中将driver声明为webdriver,否则会出现如下图所示错误:
导入和声明的方式如下:
# 导入webdriver
from appium import webdriver
from page.base_page import BasePage
class PhoneLoginPage(BasePage):
# 声明
driver: webdriver = None
二、申请百度OCR识别接口,下载对应语言的SDK文件
在调用百度OCR图片识别前,需要先申请百度通用文字识别接口,申请方法如下:
1.登录百度AI平台,申请百度通用文字识别接口,免费激活AI平台的使用权限
百度AI平台网址:https://ai.baidu.com/
进入开放能力→文字识别→通用文字识别,如下图:
点击立即使用:
创建应用:
创建成功后进入管理应用,能查看创建的应用AppID、API Key、Secret Key,如下图:
2. 查看适用不同平台/语言/功能的SDK
文字识别链接:https://ai.baidu.com/sdk#ocr
下载需要语言的SDK:
我使用的是python语言,所以下载的是对应的Python SDK(支持python版本:2.7.+,3.+),下载完成后,安装方