TA的每日心情 | 无聊 昨天 09:34 |
---|
签到天数: 1052 天 连续签到: 2 天 [LV.10]测试总司令
|
前言
在做web自动化的时候,登录验证码是一个大问题。在测试过程中,我们可以通过找研发进行去除,但是如果真的无法去除的时候,那应该怎么操作呢?
安静今天通过几个实例来给大家介绍下,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)
|
通过执行发现,我们已经在验证码输入框中输入了正确的验证码信息。
总结
其实跳过验证码的方法还有很多种,安静只是介绍了最简单最常用的两种方法进行跳过,当然最最最简单的肯定是让研发自动化测试阶段进行去除,或者用一个万能验证码进行输入。
|
|