前言
在做UI自动化测试的时候,经常会遇到登录时,需要输入验证码的场景
最简单的方式当然是和开发沟通,取消验证码的校验,
但是求人不如求自己,哈哈哈,就有了这篇文章
思路整理
既然要进行验证码的读取,简单发散一下思路,
- 获取验证码的图片数据
- 使用ocr第三方库处理图片
- ocr识别图片
- 将识别后的数据进行保存 简单就分为以上四步
但是开始进行代码的编写后,发现使用ocr第三方库遇到两个问题
- 识别精度不高
- python版本不兼容,配置很麻烦
于是开始转变思路,最近ai比较火,想尝试通过访问ai接口,上传图片数据,让ai进行识别返回数据
- 获取验证码的图片数据
- 创建连接访问ai端口
- 构建对话内容
- 输出验证码内容
代码实现
代码使用的是【方舟大模型】 首先需要安装方舟 SDK pip install volcenginesdkarkruntime
关于selenium部分就不在这里编写了
import datetime
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import base64
import requests
from volcenginesdkarkruntime import Ark
start_time= datetime.datetime.now()
# 1. 初始化浏览器,获取验证码图片数据
wd = webdriver.Edge()
wd.implicitly_wait(10)
wd.get("[引号内填写你需要获取验证码的url地址]")
# 等待图片可见,获取src
element = WebDriverWait(wd, 10).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, "div.captcha>img"))
)
src_data = element.get_attribute("src")
if src_data is None:
print("未获取到验证码图片的src属性!")
input("回车退出")
wd.close()
exit()
#编写AIAPT的基础配置:key值,AIapi接口,模型id
API_KEY = "【引号内填写你自己的API Key的值】"
BASE_URL = "https://ark.cn-beijing.volces.com/api/v3" #调用API地址
MODEL_ID = "doubao-seed-1-8-251228" #使用的大模型id
#2.连接鉴权
client = Ark(
base_url=BASE_URL,
api_key=API_KEY
)
#3.构造对话
messages = [
{
"role": "user",
"content": [
{
"type": "text",
"text": "直接识别并返回内容,不要回复其他形容"
},
{
"type": "image_url",
"image_url": {
"url": f"{src_data}"
}
}
]
}
]
response = client.chat.completions.create(
model=MODEL_ID,
messages=messages,
temperature=0.7,
max_tokens=1000
)
#4.解析并打印响应结果
result = response.choices[0].message.content
print("=== API 响应结果 ===")
print(result)
end_time= datetime.datetime.now()
print("结束记时")
total_time=end_time-start_time
print(f"代码执行总耗时:{total_time}")
print(f"总耗时(秒):{total_time.total_seconds()}")
print(f"开始时间:{start_time.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"结束时间:{end_time.strftime('%Y-%m-%d %H:%M:%S')}")
#5.暂停退出
input("回车退出")
wd.close()