今天用ddddocr这个库来实现“百度营销”模拟注册操作。
验证码识别在实际应用中有哪些场景呢?
比如:做测试、爬虫……等场景都需要使用验证码识别计数
本文案例仅供学习参看使用!
先对今天要使用的库做个介绍吧~
ddddocr
ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强度进行验证的一个python库,其由作者与kerlomz共同合作完成,通过大批量生成随机数据后进行深度网络训练,本身并非针对任何一家验证码厂商而制作,本库使用效果完全靠玄学,可能可以识别,可能不能识别。ddddocr奉行着开箱即用、最简依赖的理念,尽量减少用户的配置和使用成本,希望给每一位测试者带来舒适的体验。
selinum
Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。支持多种操作系统,如:Linux、Windows 、iOS、Android
它提供了8种定位方式:
pillow
Python图像库PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。其官方主页为:PIL。PIL历史悠久,原来是只支持python2.x的版本的,后来出现了移植到python3的库pillow,pillow号称是friendly fork for PIL
,其功能和PIL差不多,但是支持python3。
PIL可以做很多和图像处理相关的事情:
- 图像归档(Image Archives)。PIL非常适合于图像归档以及图像的批处理任务。你可以使用PIL创建缩略图,转换图像格式,打印图像等等。
- 图像展示(Image Display)。PIL较新的版本支持包括Tk PhotoImage,BitmapImage还有Windows DIB等接口。PIL支持众多的GUI框架接口,可以用于图像展示。
- 图像处理(Image Processing)。PIL包括了基础的图像处理函数,包括对点的处理,使用众多的卷积核(convolution kernels)做过滤(filter),还有颜色空间的转换。PIL库同样支持图像的大小转换,图像旋转,以及任意的仿射变换。PIL还有一些直方图的方法,允许你展
- 示图像的一些统计特性。这个可以用来实现图像的自动对比度增强,还有全局的统计分析等。
环境准备
安装ddddocr
pip install ddddocr
安装selinum
pip install selenium
安装pillow
pip install pillow
ps:安装selinum需要先下载浏览器对应的驱动,我使用的Chrome浏览器,这里就以Chrome浏览器为例。
驱动安装步骤:
- 查看自己Chrome浏览器的版本:
2.我这里的Chrome浏览器的版本如下所示,所以我需要下载如下版本的驱动。:
下载完驱动后,将驱动拷贝至Python解释器安装目录(懒得另外配置环境变量)
Chrome驱动下载地址:
http://chromedriver.storage.googleapis.com/index.html
环境准备工作完成后,我们就可以开始编写代码啦~
模拟“百度营销”注册
导入:
from ddddocr import DdddOcr from selenium.webdriver import Chrome import time from PIL import Image
user = 'admin0283' # 用户名 pwd = 'Admin1024' # 密码 phone = '要注册的手机号'
验证码识别函数:
# 验证码识别函数 def Verification(): ocr = DdddOcr() file = open('code.png', 'rb') img = file.read() result = ocr.classification(img) print(result) return result
验证图片截取函数:
# 图片处理函数 def save_code(element): fileName = 'code.png' right = 542 + element.size['width'] bottom = 507 + element.size['height'] im = Image.open('screen.png') im = im.crop((542, 507, right, bottom)) im.save(fileName) return fileName
ps:这里验证码坐标的确定,我使用的是一个在线图片坐标获取网站,只需要移动鼠标即可查看坐标,非常的方便!
百度营销模拟自动注册函数:
# 模拟注册 def register(): url = 'https://u.baidu.com/ucweb/?module=Reguser&controller=reg&action=index&appid=12&nexturl=https%3A%2F%2Ftongji.baidu.com%2Fweb%2Fwelcome%2Flogin%3FloginDialog%3D1#/base' chrome = Chrome() chrome.get(url) # 输入用户名 chrome.find_element_by_xpath('//input[@placeholder="用户名"]').send_keys(user) # 输入两次密码 chrome.find_element_by_xpath('//input[@placeholder="密码"]').send_keys(pwd) chrome.find_element_by_xpath('//input[@placeholder="再次输入密码"]').send_keys(pwd) # 输入手机号 chrome.find_element_by_xpath('//input[@placeholder="手机号码"]').send_keys(phone) # 验证码识别 chrome.save_screenshot('screen.png') img = chrome.find_element_by_xpath('//img') code = save_code(img) result = Verification() # 输入验证码 chrome.find_element_by_xpath('//input[@placeholder="验证码"]').send_keys(result) # 点击获取验证码 chrome.find_element_by_xpath('//span[text()="获取验证码"]/..').click() # 等待10秒 # 点击注册 chrome.find_element_by_xpath('//span[text()="注 册"]/..').click()
全部代码:
from ddddocr import DdddOcr from selenium.webdriver import Chrome import time from PIL import Image user = 'admin0283' # 用户名 pwd = 'Admin1024' # 密码 phone = '注册的手机号' def Verification(): ocr = DdddOcr() file = open('code.png', 'rb') img = file.read() result = ocr.classification(img) print(result) return result def save_code(element): fileName = 'code.png' right = 542 + element.size['width'] bottom = 507 + element.size['height'] im = Image.open('screen.png') im = im.crop((542, 507, right, bottom)) im.save(fileName) return fileName # 模拟注册 def register(): url = 'https://u.baidu.com/ucweb/?module=Reguser&controller=reg&action=index&appid=12&nexturl=https%3A%2F%2Ftongji.baidu.com%2Fweb%2Fwelcome%2Flogin%3FloginDialog%3D1#/base' chrome = Chrome() chrome.get(url) # 输入用户名 chrome.find_element_by_xpath('//input[@placeholder="用户名"]').send_keys(user) # 输入两次密码 chrome.find_element_by_xpath('//input[@placeholder="密码"]').send_keys(pwd) chrome.find_element_by_xpath('//input[@placeholder="再次输入密码"]').send_keys(pwd) # 输入手机号 chrome.find_element_by_xpath('//input[@placeholder="手机号码"]').send_keys(phone) # time.sleep(3) chrome.save_screenshot('screen.png') img = chrome.find_element_by_xpath('//img') code = save_code(img) result = Verification() print(img, result) # 输入验证码 chrome.find_element_by_xpath('//input[@placeholder="验证码"]').send_keys(result) # 点击获取验证码 chrome.find_element_by_xpath('//span[text()="获取验证码"]/..').click() # 等待10秒 time.sleep(10) # 点击注册 chrome.find_element_by_xpath('//span[text()="注 册"]/..').click() time.sleep(10) if __name__ == '__main__': register()
来看下效果吧~
可以看到验证码识别的还是非常的精准的哈~