Python爬虫学习第十天---反反爬:识别图片验证码ddddocr和pytesseract实测效果
爬虫学习第十天—反反爬之识别图片验证码
名称 | 环境版本 | 说明 |
---|---|---|
ddddocr | linux系统安装;python3版本:3.6.8;命令:python3 -m pip install ddddocr;安装的版本:ddddocr-1.4.3 | /usr/local/lib/python3.6/site-packages/ddddocr-1.4.3-py3.6.egg/ddddocr/init.py中需要注释调项目说明,识别效果较好;见下图: |
pytesseract | linux系统安装;python3版本:3.6.8;需要安装tesseract | 识别效果一般不推荐 |
一、利用ddddocr识别图片验证码示例
首先安装ddddocr模块:python3 -m pip install ddddocr
安装过程较为曲折,总是报错,后来按照报错的连带模块进行单独安装后,才安装完成。
1、示例代码
from selenium import webdriver
import time
from PIL import Image,ImageEnhance
import ddddocr
ocr = ddddocr.DdddOcr()
url = "要访问的页面"
options = webdriver.ChromeOptions()
options.add_argument("--headless") # 开启无界面模式
options.add_argument('--no-sandbox')
options.add_argument("--disable-gpu")
options.add_argument('--disable-dev-shm-usage') # linux上需要设置上面四项内容。
driver = webdriver.Chrome(chrome_options=options,executable_path='/usr/bin/chromedriver')
driver.get(url) # 请求Url
driver.maximize_window() # 全屏显示
driver.save_screenshot('m3.png') # 截屏整个页面,并保存为图片
location = driver.find_element_by_xpath('//*[@id="login"]/div[5]/span') # 获取验证码区域的坐标
# print(location.location)
size = location.size # 坐标大小
# print(size)
rangle = (int(location.location['x']),int(location.location['y']),int(location.location['x'] size['width']),int(location.location['y'] size['height'])) # 获取验证码图片的坐标大小
i = Image.open('m3.png') # 通过图像的方式打开保存的图片
imgry=i.crop(rangle) # 截取验证码区域
imgry.save('getVerifyCode1.png') # 保存验证码图片
im=Image.open('getVerifyCode1.png') # 再次打开新截取的验证码图片
sharpness =ImageEnhance.Contrast(im) #对比度增强,是图片中验证码更容易识别
#
sharp_img = sharpness.enhance(2.0)
#
sharp_img.save("newVerifyCode1.png") # 保存优化过的验证码图片
with open('newVerifyCode1.png', 'rb') as f:
img_bytes = f.read() # 读取图片
res = ocr.classification(img_bytes) # 获取图片中的字符
print(res)
2、代码演示结果
证明获取的验证码信息和图片中相同。
二、pytesseract方式实现验证码
1、安装pytesseract
python3 -m pip install pytesseract
2、安装tesseract
安装详情见:https://blog.csdn.net/weixin_44575268/article/details/117258508
3、代码示例
from selenium import webdriver
import time
from PIL import Image,ImageEnhance
import pytesseract
tesseract_cmd = r'/usr/local/bin/tesseract'
pytesseract.pytesseract.tesseract_cmd =tesseract_cmd
url = "要访问的页面"
options = webdriver.ChromeOptions()
options.add_argument("--headless") # 开启无界面模式
options.add_argument('--no-sandbox')
options.add_argument("--disable-gpu")
options.add_argument('--disable-dev-shm-usage') # linux上需要设置上面四项内容。
driver = webdriver.Chrome(chrome_options=options,executable_path='/usr/bin/chromedriver')
driver.get(url) # 请求Url
driver.maximize_window() # 全屏显示
driver.save_screenshot('m3.png') # 截屏整个页面,并保存为图片
location = driver.find_element_by_xpath('//*[@id="login"]/div[5]/span') # 获取验证码区域的坐标
# print(location.location)
size = location.size # 坐标大小
# print(size)
rangle = (int(location.location['x']),int(location.location['y']),int(location.location['x'] size['width']),int(location.location['y'] size['height'])) # 获取验证码图片的坐标大小
i = Image.open('m3.png') # 通过图像的方式打开保存的图片
imgry=i.crop(rangle) # 截取验证码区域
imgry.save('getVerifyCode1.png') # 保存验证码图片
im=Image.open('getVerifyCode1.png') # 再次打开新截取的验证码图片
sharpness =ImageEnhance.Contrast(im) #对比度增强,是图片中验证码更容易识别
#
sharp_img = sharpness.enhance(2.0)
#
sharp_img.save("newVerifyCode1.png") # 保存优化过的验证码图片
#
newVerify = Image.open('newVerifyCode1.png')
#
mm = pytesseract.image_to_string(newVerify,'eng')
print(mm)
4、示例结果
图片:
结果:
未识别出来。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhabjgj
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13