使用ddddocr进行网站验证码识别

        使用selenium进行数据爬取时,遇到了登录验证码,如下所示:

这里使用ddddocr将验证码图片中的文字识别;对于ddddocr的介绍可查看官网地址:GitHub - sml2h3/ddddocr: 带带弟弟 通用验证码识别OCR pypi版
这里介绍下思路:

1、将登录页保存为图片;

2、查找到验证码图片元素,获取到元素的location和size信息,基于上一步的图片裁剪出验证码图片;

3、调用ddddocr进行识别;

其中,第1步和第2步,按理说页可以通过find_element方法查找到验证码图片,再获取src属性并保存的方式处理。

废话不多说,直接上代码:

# pip install ddddocr
import ddddocr
# pip install pillow
from PIL import Image

def login(browser):
	login_url = "https://***"
	browser.get(login_url)
	time.sleep(2)
	browser.save_screenshot("currentpage1.png")
    # '//*[@id="randimg"]' 为验证码图片的xpath定位
	yzm = htmlimg2txt(browser, '//*[@id="randimg"]')


def img2txt(image_path):
    ocr = ddddocr.DdddOcr()

    image = open(image_path, "rb").read()
    result = ocr.classification(image)
    return result


def htmlimg2txt(browser, image_path):
    ## 1、将当前登录页保存为图片
    browser.save_screenshot("shot.png")
    element = browser.find_element("xpath", image_path)
    # 获取设备像素比(DPR)(此处如果不处理dpr,换一台电脑裁剪的验证码图片可能就不准确了)
    dpr = browser.execute_script("return window.devicePixelRatio")
    location = element.location
    size = element.size
    x = location['x'] * dpr
    y = location['y'] * dpr
    w = size['width'] * dpr
    h = size['height'] * dpr
    width = x + w
    height = y + h
    im = Image.open('shot.png')
	## 2、裁剪并保存验证码图片
    im = im.crop((int(x), int(y), int(width), int(height)))
    im.save('image.png')
    return img2txt('image.png')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码道功成

过程不易,恳请支持一下!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值