使用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')

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐