Python实现DAS单点登录

本文介绍了如何使用Python和百度OCR技术实现在DAS系统中的自动登录过程,包括获取验证码、使用access_token调用OCR服务识别验证码以及构造登录请求。作者详细展示了如何设置环境、安装依赖、获取百度API凭证以及编写函数来实现验证码识别和登录操作。
摘要由CSDN通过智能技术生成

❇️ 流程

  1. 进入登录页面 (DAS验证的登录页面)

  2. 获取验证码图像,百度OCR识别

  3. 登录


🏞️ 环境

  • Windows 11

  • Python 3.12

  • PyCharm 2023


🧵 准备工作

安装必要依赖库

  • bs4

  • Jupyter

  • 推荐安装 Jupyter(Anaconda 或 PyCharm 均可)进行 request 调试

pip install bs4 pip install jupyter

网址

  • DAS登录地址

  • 验证码地址

  • 用户信息 (账号、密码)

在浏览器中打开 开发者工具 或 Ctrl + F12 ,进行一次登录操作后,可以在对应的网址请求数据中查看到 DAS 的地址。

注册百度智能云账号


方法实现

百度API调用

token码获取

def access_token() -> None:
    """
    获取 access_token
    :return: None
    """
    API_Key: str = ""
    Secret_Key: str = ""
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_Key}&client_secret={Secret_Key}'
    response = requests.get(host)
    file = open("./data/access token.txt", "w")
    file.write(f"{datetime.now().strftime('%Y-%m-%d')}\n{response.json()['access_token']}")
    file.close()

OCR文字识别

def OCR() -> str:
    """
    文字验证码识别
    :return: 验证码
    """
    # 二进制方式打开图片文件
    f = open('./img/captcha.jpg', 'rb')
    img = base64.b64encode(f.read())
    params = {"image": img}
    f.close()

    # 每 30 天刷新一次 access_token 码,暂未修改,可自行完成
    if datetime.now().day == 1:
        access_token()

    TokenFile = open("./data/access token.txt", "r")
    Token = TokenFile.readlines()[1]
    TokenFile.close()
    
    # # 获取到验证码后删除该文件
    # if path.exists("./img/captcha.jpg"):
    #     remove("./img/captcha.jpg")

    url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token={Token}"
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(url, data=params, headers=headers)
    if response:
        print(response.json())
        return response.json()['words_result'][0]['words']

网址数据

网址、请求头

class URL:
    """ 网址数据 """
    genCodeURL: str = ""  # 验证码地址
    loginURL: str = "/cas/login"  # 登录地址

    header: dict = {
        "User-Agent": "",
        'Accept': "",
        'Cookie': ""
    }

验证码保存

def saveCaptchaCode(session, response: requests) -> None:
    """
    验证码保存
    :param session: 会话
    :param response: 请求
    :return: None
    """
    re = session.get(URL.genCodeURL, headers=response.request.headers)
    with open("./img/captcha.jpg", "wb") as f:
        f.write(re.content)

用户信息

class User:
    user: int = 
    password: str = ""

下面部分依据不同网站的请求数据为准,不必做参考。

execution 为登录页面中的 input 数据在本人请求的网站中为必要参数。

execution = BeautifulSoup(entry_login.text, "html.parser").find('input', {"name": "execution"}).get("value")

网页请求

创建 session 会话

session = requests.session()
  1. 【第一次请求】进入登陆页面,获取验证码

对网址发送 get 请求进入到登陆页面,拿到验证码地址。

entry_login: requests = session.get(URL.loginURL, headers=URL.header)

2. 【第二次请求】获取验证码

再对验证码地址发送一次 get 请求,保存验证码。

saveCaptchaCode(session, entry_login)

更新登录请求数据

data: dict = {
    "username": User.user,
    "password": User.password,
    "captchaCode": OCR().replace(" ", ""),
    "execution": execution,
    "_eventId": "submit",
    "geolocation": ""
}

在网页中对验证码进行点击会更新,这里对验证码地址进行一次 get 请求也相当于用户点击并刷新了验证码,此时的验证码将是最新的。

你可以依次打开登陆页面和验证码页面,此时登录页面与验证码页面的验证码是不同的,但你可以输入验证码页面的内容成功登陆。

3. 【第三次请求】登陆

对目标网址发送 post 请求,实现登陆操作。

post_server = session.post(URL.loginURL, headers=entry_login.request.headers, data=data)
 

不同网站登陆成功后的页面显示效果并不相同,如我请求的网站显示的类似等待的动态图标(一开始以为没登陆成功),你可以输出 post 登录后的URL是否跳转

post_server.url


🔗 参考链接

python-代码实现全自动带验证码登录post请求

南科大 CAS 单点登录之模拟登录

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值