Web自动化中常用的跳过验证码操作
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
前言
自动化测试中经常需要避免手动输入验证码的操作因为这会增加测试成本耗费测试人员的时间。通过自动化程序跳过验证码可以减少测试时间提高测试效率。
安静今天通过几个实例来给大家介绍下web自动化中怎么解决验证码的问题。
通过cookies值登录
我们都知道cookies是保持登录的一种状态那是否可以通过cookies进行登录呢
selenium中也有获取cookies信息操作通过将cookies保存在text中在我们执行登录操作时进行将cookies添加进去这个时候就能通过cookies完成登录从而跳过验证码内容。
思路是清晰了先进行通过selenium进行获取cookies值信息这里安静使用的方法是通过chrome配置信息selenium可以在已经打开的浏览器中进行操作获取cookies信息。
或者在常规打开浏览器页面中强制等待30秒手动输入验证码和验证码信息然后在获取cookies信息。
通过打开cmd打开新的浏览器窗口这里一定要将chrom的安装路径配置到环境变量中。
输入命令chrome --remote-debugging-port=8210 --user-data-dir="F:\chrome_config"
# chrome表示启动chrome浏览器
# remote-debugging-port表示执行浏览器端口
# 8210为个人设置的端口
# --user-data-dir="F:\chrome_config"表示新建一个浏览器配置信息。
在终端打开的浏览器中进行登录登录过后在通过selenium进行获取登录cookies值。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
options = Options()
# 启动的浏览器地址
options.debugger_address ='127.0.0.1:8210'
# 将浏览器配置信息进行添加
driver = webdriver.Chrome( chrome_options=options)
print('目前浏览器标题'+driver.title)
x = json.dumps(driver.get_cookies())
with open('cookies.txt','w') as f:
# 将cookies保存为json格式,保存下来方便下次使用。
f.write(json.dumps(driver.get_cookies()))
这里时候我们已经将登录的cookies获取下来了再次通过selenium进行访问登录页面时候通读取txt文件信息将cookies添加进去就可以完成登录了。
from selenium import webdriver
import json
driver = webdriver.Chrome()
driver.get('http://127.0.0.1/pro/user-login-L3Byby8=.html')
with open('cookies.txt','r') as f:
# 使用json读取cookies进行添加cookies
cookies_list = json.load(f)
for cookie in cookies_list:
driver.add_cookie(cookie)
# 刷新页面
driver.refresh()
通过执行发现我们已经完成了登录操作从而跳过了验证码。
通OCR识别验证码
这里安静简单的介绍下通过OCR进行识别输入类型的验证码从而完成登录操作。
在平台中找到关于OCR识别的开源接口然后通过selenium进行获取并保存图片信息在通过OCR的开源接口信息进行识别图片内容最后将识别的结果输入到验证码输入框中。
import requests
from selenium import webdriver
import base64
import time
driver = webdriver.Chrome()
# 打开登录页面
driver.get('http://v3pro.houjiemeishi.com/PC/pages/login/login.html')
# 获取验证码图片地址
img_url = driver.find_element_by_class_name('codeImg').get_attribute('src')
# 通过请求图片地址获取图片的base64编码
img_r = requests.get(url=img_url)
base64_data = base64.b64encode(img_r.content).decode()
bodys = {
"v_pic": base64_data,
"pri_id": 'ne',
"number": 4
}
# 这个参数可以通过尖叫数据进行自行申请
headers = {
'appcode': "xxxxxxx",
"appKey": "xxxxxx",
"appSecret": "xxxxxxx"
}
# 请求验证码接口信息返回验证码数字
url = 'http://apigateway.jianjiaoshuju.com/api/v_1/yzmCustomized.html'
r = requests.post(url, headers=headers, data=bodys)
tt = r.json()['v_code']
time.sleep(1)
# 验证码输入框输入验证码信息
driver.find_element_by_class_name('ipt2').send_keys(tt)
通过执行发现我们已经在验证码输入框中输入了正确的验证码信息。
总结
其实跳过验证码的方法还有很多种安静只是介绍了最简单最常用的两种方法进行跳过当然最最最简单的肯定是让研发自动化测试阶段进行去除或者用一个万能验证码进行输入。
作为一位过来人也是希望大家少走一些弯路希望能对你带来帮助。WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等相信能使你更好的进步