selenium验证码识别方案一:使用pytesseract以及PIL模块识别简单验证码

在这里插入图片描述
在这里插入图片描述

安装:
1.安装pytesseract:
pip install pytesseract
2.安装pill
PIL较多用于2.7版本的Python中,到python3版本已经用Pillow代替PIL了。
3.安装Tesseract-OCR(很重要)
Tesseract-OCR包链接:https://pan.baidu.com/s/15I7DFe5tmHzG9vbmcosPnw
提取码:e2r9

Tesseract-OCR安装步骤:
直接执行下载好的tesseract-ocr-setup-4.0.0-alpha.20180109.exe,下一步、下一步安装。安装过程中,会让你安装额外的语言包,可根据选择下载。

第三步:配置环境变量

我的是安装在C:\Program Files (x86)\Tesseract-OCR,界面如下:

在这里插入图片描述
将“F:\Tesseract-OCR”添加到环境变量中。如图:
在这里插入图片描述
增加一个TESSDATA_PREFIX变量名,变量值还是我的安装路径F:\Tesseract-OCR\tessdata这是将语言字库文件夹添加到变量中;
在这里插入图片描述
然后:找到python的安装路径下的pytesseract: 例如我的是 E:\Python3.7.1\Lib\site-packages\pytesseract
在这里插入图片描述
2.用文本编辑器打开,查找tesseract_cmd

将原来的 tesseract_cmd = ‘tesseract’ 改为: tesseract_cmd = ‘OCR的安装路径下的tessract.exe’

例如我的是 tesseract_cmd = ‘C:\Program Files\Tesseract-OCR\tesseract.exe’

注意有的地方需要转义 例如 \tesseract.exe,或者也可直接加r转义

tesseract_cmd = r’C:\Program Files\Tesseract-OCR\tesseract.exe

在这里插入图片描述
就可以运行了,要不然会找不到路径,超级麻烦。

比如测试获取登录链接的验证码:
http://localhost:8080/jpress/user/register

在这里插入图片描述
代码如下:

from time import sleep
from selenium import webdriver
import pytesseract
from PIL import Image
import os
from time import sleep, strftime, localtime, time

#解决简单验证码问题
def test_koutu():
    """先把验证码图片扣取下来"""
    #打开谷歌
    browser=webdriver.Chrome()
    browser.get('http://localhost:8080/jpress/user/register')
    browser.maximize_window()
    #获取验证码图片
    st = strftime("%Y-%d-%H-%M-%S", localtime(time()))
    fime_time = st + '.png'

    path = os.path.abspath('screenshopts')
    file_path = path + '/' + fime_time
    browser.get_screenshot_as_file(file_path)

    ce = browser.find_element_by_xpath('/html/body/div[1]/div/form/div[6]/img')
    print(ce.location)
    left = ce.location['x']
    top = ce.location['y']
    right = ce.size['width'] + left
    height = ce.size['height'] + top

    im = Image.open(path + '/' + fime_time)
    # 抠图
    img = im.crop((left, top, right, height))

    st = strftime("%Y-%d-%H-%M-%S", localtime(time()))
    fime_time2 = st + '.png'
    path = os.path.abspath('screenshopts')
    file_path = path + '/' + fime_time2
    img.save(file_path)  # 这里就是截取到的验证码图片
    browser.close()

#由于这种方式不能获取这种复杂的验证码  所以就只能自己传了一个test.jpg图片来获取了
def test_yanzhengma():
    path = os.path.abspath('screenshopts')
    print(path)
    image1 = Image.open(path + '/' + 'test.jpg')
    str = pytesseract.image_to_string(image1)
    print(str)


在这里插入图片描述
紧接着我会再更新一篇利用第三方库来获取复杂验证码的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值