Python自动化实现登录获取图片验证码功能
本文介绍如何使用Python的Selenium库定位并截取登录页面的图片验证码,随后调用百度AI高精度文字识别API进行OCR解析。通过获取验证码坐标、截取局部图像及调用SDK,实现自动化登录流程中的验证码自动填充与提交,适用于Web自动化测试场景。
Python自动化验证码识别概述
本文主要记录关于图片验证码处理的自动化实现过程。
验证码定位与截取流程
第一步,获取登录界面中的图片验证码元素。
第二步,确定验证码在页面中的具体坐标位置。
第三步,在完整登录页面截图的基础上,截取验证码区域并保存。
第四步,调用百度OCR接口进行识别,该接口目前具有较高的图片文字识别准确率。
观察本次登录系统的页面布局,可以清晰看到图片验证码的具体位置。

Selenium定位与截图代码实现
from selenium import webdriver
import time
from PIL import Image
base_url = '***********'
browser = webdriver.Chrome()
browser.maximize_window()
browser.implicitly_wait(10)
browser.get(base_url)
# (1)登录页面截图
browser.save_screenshot("D:/pic.png")#可以修改保存地址
# (2)基操
browser.find_element_by_name("username").send_keys("gxx")
browser.find_element_by_name("password").send_keys("123456")
time.sleep(2)
# (3)获取图片验证码坐标
code_ele = browser.find_element_by_xpath("//*[@id='app']/div/div[1]/form/div[3]/div/div/div[2]/div/img")
print("验证码的坐标为:", code_element.location)#控制台查看{'x': 1086, 'y': 368}
print("验证码的大小为:", code_element.size)# 图片大小{'height': 40, 'width': 110}
# (4)图片4个点的坐标位置
left = code_ele.location['x']#x点的坐标
top = code_ele.location['y']#y点的坐标
right = code_ele.size['width']+left#上面右边点的坐标
down = code_ele.size['height']+top#下面右边点的坐标
image = Image.open('D:/pic.png')
# (4)将图片验证码截取
code_image = image.crop((left, top, right, height))
code_image.save('D:/pic1.png')#截取的验证码图片保存为新的文件
此前步骤中,我们已将包含验证码的完整页面截图保存至本地。
经过坐标计算与截取处理,最终得到独立的验证码图片。

调用百度OCR进行文字识别
接下来,需要调用百度OCR服务对截取的验证码图片进行文字识别。
访问链接:https://ai.baidu.com/docs#/ 获取相关技术支持。
在百度AI平台中,可以选择通用文字识别或高精度版本。对于验证码识别,建议优先选择高精度版本(尽管识别率并非100%,测试阶段建议联系开发人员临时移除验证码以简化流程)。需自行申请百度云账号并开通文字识别服务。随后新建一个Python文件进行编码。
百度OCR SDK集成与调用示例
#百度ocr提供了模板,我们直接复制就ok
#下载通用文字识别的python sdk,一定要放在你写的代码的文件夹下面
from aip import AipOcr
from os import path
def baiduOCR(picfile,outfile):#picfile:图片文件名 outfile:输出文件
filename = path.basename(picfile)#图片名称
#百度提供
""" 你的 APPID AK SK """
APP_ID = ''#这是你产品服务的appid
API_KEY = ''#这是你产品服务的appkey
SECRET_KEY = ''#这是你产品服务的secretkey
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
i = open(picfile, 'rb')
img = i.read()
print("正在识别图片:\t" + filename)
""" 调用通用文字识别(高精度版) """
message = client.basicAccurate(img)
print("识别成功!")
i.close()
with open(outfile, 'a+') as fo:#这边是写进.txt文件
fo.writelines("*" * 60 + '\n')#搞点花里胡哨的做区分
fo.writelines("识别图片:\t" + filename + "\n" * 2)
fo.writelines("文本内容:\n")
# 输出文本内容
for text in message.get('words_result'):#识别的内容
fo.writelines(text.get('words') + '\n')
fo.writelines('\n' * 2)
print("文本导出成功!")
print()
if __name__ == '__main__' :
outfile = 'D:/export1.txt'#保存的文件
baiduOCR('D:/pic1.png', outfile)
print('图片文本提取结束!文本输出结果位于 %s 文件中。' % outfile)

识别结果输出后,若内容正确则令人惊讶,因为此前多次尝试均存在识别不准的情况。成功获取验证码文本后,将其填入输入框并点击登录按钮即可完成操作。
总结与致谢
总结上述流程,本文介绍了利用Python自动化实现登录获取图片验证码的功能。
以上内容由小编整理发布,旨在帮助读者解决相关问题。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!若本文对您有帮助,欢迎转载,请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









