为了更好的巩固web自动化测试的学习,为此找了个线上网站进行自动化且通过验证码的登录。
1.测试网址(https://www.bazhuayu.com/login)
#自行注册好账号密码以便登录
2.第三方识别验证码(http://www.chaojiying.com/)
#自行注册好账号,关注微信公众号绑定有1000积分足够测试用
3.开发工具pycharm
新建project
新建包
Lib(存放接口文档)
Screenshots(存放截图)
Testcases(存放测试用例)
Util(存放自己集成后的相关功能)
main.py(用于运行)
http://www.chaojiying.com/api-14.html(超级鹰python demo下载)
#!/usr/bin/env python
# coding:utf-8
import requests
from hashlib import md5
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id):
self.username = username
password = password.encode('utf8')
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
'user': self.username,
'pass2': self.password,
'softid': self.soft_id,
}
self.headers = {
'Connection': 'Keep-Alive',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
}
def PostPic(self, im, codetype):
"""
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
}
params.update(self.base_params)
files = {
'userfile': ('ccc.jpg', im)}
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
return r.json()
def ReportError(self, im_id):
"""
im_id:报错题目的图片ID
"""
params = {
'id': im_id,
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
return r.json()
if __name__ == '__main__':
chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '96001') # 用户中心>>软件ID 生成一个替换 96001
im = open('a.jpg', 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(chaojiying.PostPic(im, 1902))
#1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
from PIL import Image
from Lib.chaojiying import Chaojiying_Client
import random,string,os,time,pickle
def get_code(drive,id):
#获取验证码图片
t=time.time()
path=os.path.dirname(os.path.dirname(__file__))+'\\Screenshots'
picture_name1=path+'\\'+str(t)+'.png'
drive.save_screenshot(picture_name1)
ce=drive.find_element_by_id(id)
left = ce.location['x'] * 1.25 # 计算左边界
top = ce.location['y'] * 1.25 # 计算上边界
right = (ce.location['x'] + ce.size['width']) * 1.25 # 计算右边界 *1.25是根据电脑的缩放与布局
botom = (ce.location['y'] + ce.size['height']) * 1.25 # 计算下边界
# 将上下左右边界值放到元祖中(注意顺序:左 上 右 下)
im=Image.open(picture_name1)
img=im.crop((left, top, right, botom))
t=time.time()
picture_name2=path+'\\'+str(t)+'.png'
img.save(picture_name2)
# 调用第三方库
chaojiying = Chaojiying_Client('#', '#', '#') #自己输入账号,密码,和id(超级鹰个人中心生成)
im = open(picture_name2, 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
res = chaojiying.PostPic(im, 1902)
data = res['pic_str']
return data
在Testcase包里新建test_login_bzy.py
from selenium import webdriver
from time import sleep
from Util import util
class Testlogin(object):
def __init__(self):
#实例化浏览器
self.drive=webdriver.Chrome()
#测试网址
self.drive.get('https://www.bazhuayu.com/login')
sleep(2)
def test_bzy(self):
#定位用户名/手机号/邮箱输入框
self.drive.find_element_by_id('LoginName').send_keys('账号')
#定位密码框
self.drive.find_element_by_id('Password').send_keys('密码')
#第三方Api识别
captcha=util.get_code(self.drive,'captchaImg')
#定位验证码框
self.drive.find_element_by_id('Captcha').send_keys(captcha)
#点击登录
self.drive.find_element_by_id('login').click()
if __name__ == '__main__':
Testlogin().test_bzy()
在main.py运行
from Testcases.test_login_bzy import Testlogin
if __name__=="__main__":
Testlogin().test_bzy()
1.现在第三方的图片识别比较多,也可以搭建相关依赖进行本地训练,但是为了节约时间,可以选择第三方稳定接口
2.规范化尤为重要,后期的迭代可以体现
3.识别验证码其实就是截图后再进行抠图再进行识别返回