- 计算题验证码与普通图像验证码的区别在于增加了数学运算,需要将验证码中数学计算题的结果填到文本框中,再单击“验证”。
- 计算题验证码的处理难点在于运算符号的识别。如果将运算符号作为常规的图像文字进行识别,那么容易出现问题,例如,经常会把乘号或倾斜的加号识别为字母x,导致难以得到正确的计算结果。
- 超级鹰有专门识别计算题或问答题的接口,如下图所示(详见https://www.chaojiying.com/price.html)。
- 具体到Python代码层面,只需修改前面定义的cjy()函数的代码,将其中的PostPic()函数的第二个参数改为6001,修改后代码如下,超级鹰会自动识别计算题并返回计算结果。
def cjy(): #使用超级鹰识别图像验证码的自定义函数
chaojiying = Chaojiying_Client('账号', '密码', '932868') # 用户中心>>软件ID
im = open('a.png', 'rb').read() # 打开本地图片文件,有时WIN系统须要//
code = chaojiying.PostPic(im,6001)['pic_str']
return code
from selenium import webdriver
browser = webdriver.Chrome()
from chaojiying import Chaojiying_Client
def cjy(): #使用超级鹰识别图像验证码的自定义函数
chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '软件ID') # 用户中心>>软件ID
im = open('a.png', 'rb').read() # 打开本地图片文件,有时WIN系统须要//
code = chaojiying.PostPic(im,6001)['pic_str']
return code
#1.访问网址
url = r'D:\works\python_crawl1\《Python爬虫(进阶与进通)》代码汇总\2.验证码反爬\2.计算题验证码\英文图像验证码\index.html'
browser.get(url) #用模拟浏览器打开网页
#2. 截取验证码图片
browser.find_element_by_xpath('//*[@id="verifyCanvas"]').screenshot('a.png') #a.png是自己命令的图片名称
#3.通过超级鹰识别
result = cjy() #调用函数识别验证码,并将识别结果赋给变量result
print(result) #打印输出识别结果
# 4.输入验证码并完成验证
browser.find_element_by_xpath('//*[@id="code_input"]').send_keys(result) #模拟输入验证码
browser.find_element_by_xpath('//*[@id="my_button"]').click() #模拟单击"验证"按钮
- 识别效果如下图所示,可以看到验证成功。