操作步骤:
1:登陆打开CET-考试系统
2:填写相关登陆信息
3:调用百度ocr实现文字验证码识别
4:实现登陆
如何使用和调用百度ocr文字识别接口
1:进入百度AI开发平台:链接
2:在页面上选择进入控制台:
3:登陆百度账号(没有百度账号的需要先注册)
4:进来后点击文字识别
5:进来后再点击创建应用(这里我已创建好)
6:获取我门需要的三个信息,后面代码需要用到
即AppID,APIkey,SecretKey
代码需要用到的python库:
1: selenium
2: time(时间模块,用于适当的时间加载限制)
3:PIL(图像处理模块,也可用Open-cv模块代替实现相关需求)
4: baidu-aip模块
少数人可能在from aip import AipOcr 这段代码就报错了,原因是你没有安装百度的接口,不过没关系,你只需要用cmd进入你安装Python的路径下执行 pip install baidu-aip 即可!
下面进入代码环节(有注释):
#利用百度ocr识别自动登陆四级考试网并进入报名页面
from selenium import webdriver
from time import sleep
from PIL import Image
from aip import AipOcr
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import UnexpectedAlertPresentException
#驱动的加载和访问页面
driver = webdriver.Chrome()
driver.maximize_window()
#设置页面加载时间
driver.set_page_load_timeout(20)
driver.set_script_timeout(20)
#CET-考试系统网址
url = 'http://cet-bm.neea.edu.cn/'
driver.get(url)
#点击进入报名页面
driver.find_element_by_xpath('//*[@id="main_l"]/a[1]/p[1]').click()
#填写相关信息
username = '######' #这里填写你的登陆用户名,如手机号
password = '#####' #这里输入你的登陆密码
driver.find_element_by_xpath('//*[@id="txtUserName"]').send_keys(username)
driver.find_element_by_xpath('//*[@id="txtPassword"]').send_keys(password)
driver.implicitly_wait(3) #隐式等待
"""截屏并调用百度ocr文字识别输入验证码"""
while True:
driver.find_element_by_xpath('//*[@id="txtCheckImageValue"]').clear() #每次执行前清空输入栏
screenImg = r'D:\python\1.png' #截图图片的存储路径,我这里放入我的相关目录,你也可以更改r'###'的内容
#截图整个窗口的图,据此后面再根据坐标信息截图特定验证码位置的图
driver.get_screenshot_as_file(screenImg)
#获取验证码图片的位置坐标信息
location = driver.find_element_by_xpath('//*[@id="imgCheckImage"]').location
#获取验证码图片的尺寸大小
size = driver.find_element_by_xpath('//*[@id="imgCheckImage"]').size
#获取截图所需的位置信息
left = int(location['x'])
top = int(location['y'])
right = int(location['x']+size['width'])
bottom = int(location['y']+size['height'])
#由上面的坐标信息截图特定区域,得到验证码截图
img = Image.open(screenImg).crop((left,top,right,bottom))
img.save(screenImg)
#定义百度ocr相关变量,将你的前面百度复制三个信息填入其中
AppID = '#########'
APIKey = '##########'
SecretKey = '#########'
#初始化操作
client = AipOcr(AppID,APIKey,SecretKey)
i = open(screenImg,'rb') #以rb方式打开目标路径图片即验证码截图
img = i.read() #读取截图
message = client.basicGeneral(img)
print(message)
for i in message.get('words_result'):
print(i,i.get('words'))
if message.get('words_result') != []:
driver.find_element_by_xpath('//*[@id="txtCheckImageValue"]').send_keys(i.get('words'))
else:
driver.find_element_by_xpath('//*[@id="txtCheckImageValue"]').send_keys('识别不出来')
#判断登陆情况据此执行不同操作
try:
#点击登陆按钮
driver.find_element_by_xpath('//*[@id="ibtnLogin"]').click()
if u'欢迎使用CET考试报名系统' not in driver.title:
print("窗口弹出,验证码错误")
#由于登陆失败会弹出对话框,下面是处理弹出的对话框
alert = driver.switch_to.alert
sleep(2)
alert.accept()
else:
print("登陆成功!!")
break
except UnexpectedAlertPresentException:
print("重新登陆......")
driver.implicitly_wait(3)
#注意重新登陆尝试需要对几个输入框都清空
username = "#######" #这里输入你的用户名
password = "######" #这里输入你的密码
driver.find_element_by_xpath('//*[@id="txtUserName"]').clear()
driver.find_element_by_xpath('//*[@id="txtUserName"]').send_keys(username)
driver.find_element_by_xpath('//*[@id="txtPassword"]').clear()
driver.find_element_by_xpath('//*[@id="txtPassword"]').send_keys('password')
print("恭喜,您已成功通过识别验证码")
The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号