问题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()