URP教务系统自动登录

本文介绍了如何实现对URP教务系统的自动登录,包括识别验证码、图片降噪处理以及使用Js2Py库处理JavaScript加密。通过自动化脚本,实现了登录后爬取空闲教室数据的功能。
摘要由CSDN通过智能技术生成

这篇博客是我对 hack 进学校教务系统的一个过程总结,详细代码已经放在GitHub上,需要的自取

URP教务系统自动登录脚本

验证码

打开网站 http://jwxs.hhu.edu.cn/ 直接重定向到了登录页面 http://jwxs.hhu.edu.cn/login

个人觉得这个教务系统界面还是比较好看的,因为大一刚来的时候是旧版的教务,UI还是2000年的风格。

我们面临的第一个问题就是验证码.

全自动区分计算机和人类的公开图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),又称验证码,是一种区分用户是机器或人类的公共全自动程序。

获取验证码图片

打开浏览器的开发者工具,刷新页面,可以发现验证码的路径为

http://jwxs.hhu.edu.cn/img/captcha.jpg

我们先写一小段代码把这张图片下载下来

import requests

prefix = 'http://jwxs.hhu.edu.cn/'
captcha_url = prefix + 'img/captcha.jpg'
src = 'captcha.jpg'

response = requests.get(captcha_url)
file = open(src, 'wb')
file.write(response.content)
file.close()

比如下面这张图片

接下来就是进行文字识别了

识别验证码内容

这里我查阅资料发现需要使用 tesseract 这个OCR引擎,安装半天终于安装好了之后发现识别结果基本不太准,我又找到了一个名字很特殊的python库

ddddocr - 带带弟弟OCR通用验证码识别SDK免费开源版

我抱着玩一玩的心态安装了,并且尝试着识别了几张图片,发现效果还行

import ddddocr
import requests

prefix = 'http://jwxs.hhu.edu.cn/'
captcha_url = prefix + 'img/captcha.jpg'
src = 'captcha.jpg'

response = requests.get(captcha_url)
file = open(src, 'wb')
file.write(response.content)
file.close()

ocr = ddddocr.DdddOcr(show_ad=False)
with open(src, 'rb') as f:
    img_bytes = f.read()
res = ocr.classification(img_bytes)
print('captcha:', res)
>>> captcha: c65a

就它了!

在我尝试了很多张图片后,我发现由于图片中的干扰线,识别成功率其实不是很高,于是我就继续查阅资料,试图图片进行降噪处理。

图片降噪处理

在经历了多次失败之后,我总结了一下原因:

  1. 网上的解决方案并不一定适合所有种类的验证码,比如说有的验证码只是背景有噪点,或者有很多细线,而我们这个是一条和内容差不多的黑线,按照网上的一些方法降噪很可能连着内容本身也去掉了

  2. 仔细观察验证码,可以发现都是画面主题是红色,加上黑粗线,那我们只需要将图片中的黑色或者接近黑色的像素块改成白色不就行了?

又是一轮新的尝试,最终发现下面这样处理效果最好

import ddddocr
import requests
from PIL import Image

prefix = 'http://jwxs.hhu.edu.cn/'
captcha_url = prefix + 'img/captcha.jpg'
src = 'captcha.jpg'
dst = 'captcha_p.png'


def process_data(src, dst):
    img = Image.open(src)
    w, h = img.size
    for x in range(w):
        for y in range(h):
            r, g, b = img.getpixel(
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值