python3 利用百度AI进行简单的字母数字验证码识别

python3 利用百度AI进行简单的字母数字验证码识别

新手学习笔记,勿喷!
完成网页登录试过的方法:

  1. 添加cookie(有时候过一会,或者过一天就不能登录,不知道为什么)
  2. 基于传统的机器学习SVM(图片分类人工处理工作量比较大,不知道是我的样本少还是……反正识别不准)

基本原理

  1. 利用selenium操作网页,对登录页面截图,截取验证码图片
  2. 利用百度AI进行字母数字验证码识别,完成登录

下面代码:

from selenium import webdriver
from aip import AipOcr
from PIL import Image
from selenium.webdriver.support.ui import WebDriverWait
import os
import time

APP_ID = "百度AI——ID" 
API_KEY = "百度AI——APIKEY"
SECRET_KEY = "百度AI——SECRET_KEY "

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
def getPic():
    #获取截图
    driver.get_screenshot_as_file('screenshot.png')
    #获取指定元素位置
    element = driver.find_element_by_xpath('//*[@id="kaptchaImage"]')
    print(element.size)
    print(element.location)
    #获取位置不准,进行微调
    left = int(element.location['x'])+152
    top = int(element.location['y'])+42
    right = int(element.location['x'] + element.size['width'])+152
    bottom = int(element.location['y'] + element.size['height'])+42

    #通过Image处理图像
    im = Image.open('screenshot.png')
    im = im.crop((left, top, right, bottom))
    im.save('code.png')

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("http://XXXX/login.jsp")  # 地址栏里输入网址
driver.find_element_by_xpath('//*[@id="pfzj"]').send_keys("账号")  # 
driver.find_element_by_xpath('//*[@id="efgk"]').send_keys("密码")
def getChar():
    getPic()
    image = get_file_content('code.png')
    """ 调用通用文字识别(高精度版) """
    result = client.basicAccurate(image)
    words_result = result.get("words_result")
    #删除屏幕截图
    os.remove('screenshot.png')
    #删除验证码截图
    os.remove('code.png')
    print(words_result)
    ss = words_result[0].get("words")
    #删除空格
    ss = ss.replace(' ','')
    return(ss)

driver.find_element_by_xpath('//*[@id="authcode"]').send_keys(getChar())
driver.find_element_by_xpath('//*[@id="form_submit"]').click()
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值