python+ocr+selenium 自动化登录校园网

主要问题:

  • 问题1验证码
  • 问题2重定向

解决方案:

问题1验证码

因为我校校园网的验证码较清晰,打算直接用ocr解决。
使用ddddocr(带带弟弟ocr) 实测准确率很高
ddddocr Github地址

查看校园网登录页面代码,发现验证码为js按一定规律生成的,验证码的图片无法获取到,没地址。
使用selenium库 截图整个登录页面 再定位验证码图片位置
再获取验证码图片的坐标与尺寸 并截图保存验证码框
解决获取验证码图片的问题

问题2重定向

随便进个网址,触发网络登录

在主要问题解决后,根据登录页面代码,使用selenium 确定账号 密码 验证码输入框位置
使用send_keys 传值, click登录键

注:

selenium中webdriver.Chrome 需要查询chrome浏览器版本号 下载配置相应ChromeDriver

附上代码:

import ddddocr
from selenium import webdriver
from time import sleep
from PIL import Image

driver = webdriver.Chrome()

driver.get("http://www.baidu.com") #解决重定向
sleep(0.5)

driver.get('校园网登录页面') #校园网登录页面
driver.maximize_window()
sleep(0.5)
driver.save_screenshot('./web_page.png')

vertify_kuang = driver.find_element_by_id('verifyCanvas')
location = vertify_kuang.location 
print('location',location)
size = vertify_kuang.size 
print('size',size)
rangle = (
    int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height'])
)
print('rangle',rangle)

i = Image.open('./web_page.png')
frame = i.crop(rangle)
frame.save('./verify.png')

ocr = ddddocr.DdddOcr()
with open('./verify.png', 'rb') as f:
    img_bytes = f.read()
res = ocr.classification(img_bytes)
str(res)

vertifycode = driver.find_element_by_id('verify-num')
phonenumber = driver.find_element_by_id('web-auth-user')
password = driver.find_element_by_id('web-auth-password')
vertifycode.send_keys(res)
phonenumber.send_keys('*******') #账号
password.send_keys('******') #密码

button = driver.find_element_by_id('web-auth-connect')
button.click()

你可能感兴趣的:(python)