Python+selenium 实现验证码识别
此篇文章仅作为自己的电子笔记,欢迎大神指教,如果能帮助到更多初学自动化测试的人也更好了!
我用的python版本是3.6的,至于python和selenium安装配置这些步骤不再多说了,网上应该有很多与此相关的教程了。
首先我们需要安装几个模块:打开cmd,使用命令
PIL模块:pip3 install pillow
pytesseract模块:pip install pytesseract
安装后记得检查venv/Lib/site_packages下是否已经有这些模块了,像这样:
那么下面我们就正式开始截取验证码了,第一步要做的就是引入我们后面要用到的模块,代码如下:
# coding = utf-8 from time import sleep from selenium import webdriver from PIL import Image import pytesseract
然后我们来实现打开网站,跳转网站的注册页面:
#打开谷歌浏览器 browser = webdriver.Chrome() #打开首页 browser.get("输入注册页面URL路径") browser.maximize_window() #如果需要点击注册按钮 browser.find_element_by_xpath('//a[contains(text(),"注册")]').click()
接下来我们就需要截取注册页面,再从截取到的注册页面图片上根据验证码图片的尺寸截取相应的图片,我们就用最后截取到的图片进行识别,原理大概就是先截取整个页面,根据id元素定位到验证码图片位置,算法计算出验证码的具体大小(可能会有截取不准确的情况,这里可以自己输入数字进行调整),最后保存截取到的验证码图片,代码如下:
#获取验证码图片 browser.save_screenshot('picture.png') ce = browser.find_element_by_id("imageCode")#具体的id要用F12自行查看 print(ce.location) left = ce.location['x'] top = ce.location['y'] right = ce.size['width'] + left height = ce.size['height'] + top im = Image.open('picture.png') img = im.crop((left,top,right, height)) img.save('picture2.png')#这里就是截取到的验证码图片 browser.close()
最后我们使用pytesseract这个模块来识别图片中的验证码:
#引入pytesseract识别图片中的验证码 image1 = Image.open('picture1') text = pytesseract.image_to_string(image1) print(text)
这个方法比较简单,只适用验证码图片非常清晰的情况,在项目中虽不太实用,但可以用来练习了解大概原理,今后学到了适用面更广的方法会再分享给大家。