本文使用使用tesseract开源软件识别验证码图片,详细操作请博客tesseract-ocr的安装及使用pycharm来运行 - kongbursi - 博客园
废话不多说,直接上代码
import requests
from fake_useragent import UserAgent
from lxml import etree
import base64
import pytesseract
from PIL import Image
# 使用tesseract开源软件识别验证码图片
pytesseract.pytesseract.tesseract_cmd = r'.\tesseract\Tesseract-OCR\tesseract.exe'
# 使用session请求,方便后续操作
session = requests.Session()
# 制造假的headers
fake_header = UserAgent()
if __name__ == "__main__":
# 学校登录的网址
url = "https://cas.hrbeu.edu.cn/cas/login?service=http://edusys.hrbeu.edu.cn/jsxsd/index.jsp#/"
# 由于学校网站的源代码跟审查代码不一样(查了一下应该是异步请求,本人还没学会)
# 于是get请求了一下验证码
url1 = "https://cas.hrbeu.edu.cn/sso/apis/v2/open/captcha?captchaSize=4"
# 随机生成假headers
headers = {"User-Agent": fake_header.random}
# 获取HEU登录网站
session.get(url=url, headers=headers)
# 获取验证码的json,发现它是以data:image/jpeg;base64,开头的
# 百度一下,可以知道,这是以base64方式编码的jpeg图片
# 有CTF经验的同学可以举手进行base64转换了
page_text = session.get(url=url1, headers=headers).json()
img_imf = page_text['img']
# 将data:image/jpg;base64格式的数据转化为图片并下载
page_content = base64.b64decode(img_imf)
file_path = './验证码.jpeg'
with open(file_path, 'wb') as f:
f.write(page_content)
# 识别图片并打印
image = Image.open('验证码.jpeg')
text = pytesseract.image_to_string(image)
print(text)
下面是爬取到的验证码.jpeg图片:
下面是输出结果: