Python爬虫自动识别验证码登陆

目录

一、思路

二、代码

三、注意事项


一、思路

        使用selenium先get到页面,截取登陆界面(包括验证码)。代码处理+ocr识别,自从输出验证码,再使用selenium定位到登陆元素,点击登陆即可。

二、代码

from selenium import webdriver
import cv2
from paddleocr import PaddleOCR
import re
from PIL import Image
import requests
import sys
import scipy


if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.implicitly_wait(3)        # 设置隐士等待
    driver.get('url')    # 要爬取的url

    # 屏幕截图----进入到验证码界面再截图
    driver.save_screenshot('code.png')

    # 找到验证码                        验证码页面元素标签
    photo = driver.find_element_by_tag_name('img')
    x = photo.location['x']
    y = photo.location['y']
    width = photo.size['width']
    height = photo.size['height']

    # 保存验证码
    im = Image.open('code.png')
    im = im.crop((x, y, x + width, y + height))
    im.save('new_code.png')

    raw = cv2.imread('new_code.png',0)
    # 二值化图片
    binary = cv2.adaptiveThreshold(~raw, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 35, -5)
    cv2.imshow('binary_picture', binary)
    if cv2.waitKey(0):
        cv2.destroyWindow('binary_picture')

    # 调用paddleOCR识别
    ocr = PaddleOCR(use_angle_cls=True ,use_gpu=False)
    img_info = ocr.ocr(binary, cls=False)
    print(img_info)

    # 最终结果
    img_result = ""
    for line in img_info:
        # 得到图片中文字  循环加总,(多行的情况)
        img_result += line[-1][0]
        img_result += ' '

    # 去除特殊字符
    text1 = re.findall(r'[^\*"/:?\\|<>″′‖ 〈\n]', img_result, re.S)
    text1 = "".join(text1)
    print('验证码图片信息:' + text1)


三、注意事项

        除上述之外还需做一个其他事情,就是假设验证码里包含x等形似数学运算符的,需要做一个判断来保持识别的准确率。

        列如:

# 注意这里的×为乘号
if '×' in text:
    text.replace('×','X')

猜你喜欢

转载自blog.csdn.net/zkkkkkkkkkkkkk/article/details/126927712