Skip to main content

A python-lib for authenticating HustPass@2023

Project description

HustLogin

A python-lib for authenticating HustPass@2023

HustPassLogo

Faster, Easier, Lighter

Attention: HustPass login protocol underwent a major update on 2023/05/23, moving from DES to RSA, previous login libraries are now deprecated.

Tutorials on Bilibili

Plug-in for python-requests HustAuth

Installing

The library has been made publicly available on PyPI hust_login

Installing by a single line of command, and requirements will be automatically handled.

pip install hust_login

Additionally, you need to install tesseract-ocr back end:

  • Win: download binary here, "3rd party Windows exe’s/installer" recommanded.
  • Linux: run sudo apt install tesseract-ocr

Documentation

hust_login.HustLogin(username, password, headers=None)

PARAMETERS:

  • username -- Username of pass.hust.edu.cn e.g. U2022XXXXX
  • password -- Password of pass.hust.edu.cn
  • headers -- Headers you want to use, optional (the default header works fine)

RETURNS:

  • A requests.Session object that is already logged in
    • use it the same way you use requests, e.g.
      s = hust_login.HustPass('U2022XXXXX','YOUR-PASSWORD')
      ret = s.get(your_url)
      print(ret.text)
      

hust_login.HustLogin(username, password, headers=None)

PARAMETERS: Same as HustLogin

RETURNS:

  • A class that contains wrapped common functions like QueryElectricityBills, QueryCurriculum, QueryFreeRoom, etc.

BE CREATIVE!!!

Demo

Demonstrating how to query the exam result

  • CODE:
    from hust_login import HustPass
    from bs4 import BeautifulSoup
    
    with HustPass('U2022XXXXX','YOUR-PASSWORD') as s:
        ret = s.get('http://hub.m.hust.edu.cn/cj/cjsearch/findcjinfo.action?xn=2022&xq=0')
        soup = BeautifulSoup(ret.content, 'html.parser')
        for row in soup.find_all('tr'):
            for col in row.contents:
                print(col.text.strip(), end=" ")
            print("")
    
    It's recommended to call HustPass in the with statement, as shown.
  • RESULT:
    setting up session...
    captcha detected, trying to decaptcha...
    decaptching...
    encrypting u/p...
    captcha_code:4608
    posting login-form...
    ---HustPass Succeed---
     课程名称  课程学分  课程成绩  备注  
     微积分(一)(上)  5.5  90
     综合英语(一)  3.5  94
     线性代数  2.5  92
     工程制图(一)  2.5  98
     综合英语(二)  3.5  93
     微积分(一)(下)  5.5  94
      ...
      ...
      ...
     加权排名成绩  91.71
     必修课总学分  50.50
     公选课总学分  2.00
     总学分  52.5
    

Development

If the lib outdated, try to make a pull request to get this lib working again!

The js-scripts that enable encrypting and posting the login-form during regular login are publicly available login_standar.js?v=20230523. My job was to translate the js into python and deal with the captcha code.

Here are something worth mentioning if you are developing a newer version of the lib:

  • Encrytion:

    • PublicKey is encoded in base64, decode it first.
    • The usr/pass you encrypted should be encoded in base64, and converted into the text instead of bytes. Look deeper into my code to see how it works.
  • Decaptcha

    • The BytesIO method is used to convert byte-stream containing the gif into the file.
    • Genius approach applied to combine and de-noise the 4-frame gif: As observed, the number pixels would appear in 3 frames at least, while noise pixels are less than 2. This provides a super accurate way to de-noise the picture. Here's the code clip, try to understand:
      img_merge = Image.new(mode='L',size=(width,height),color=255)
      for pos in [(x,y) for x in range(width) for y in range(height)]:
          if sum([img.getpixel(pos) < 254 for img in img_list]) >= 3:
              img_merge.putpixel(pos,0)
      
      org processed
  • Network

    • A common fake User-Agent is essential! HustPass has blocked python-requests's default User-Agent.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hust_login-2.0.0.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hust_login-2.0.0-py3-none-any.whl (18.0 kB view details)

Uploaded Python 3

File details

Details for the file hust_login-2.0.0.tar.gz.

File metadata

  • Download URL: hust_login-2.0.0.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for hust_login-2.0.0.tar.gz
Algorithm Hash digest
SHA256 5c14b358db4e0a24be2720bdc29fa36e028884fe4227643ce8b46b6498629c82
MD5 445e7c52c4e598f54a830d78d711da31
BLAKE2b-256 d17b1100040589075fe05c554914b57d6d42aa2dc34cfa9e2da6367c9d8d7969

See more details on using hashes here.

File details

Details for the file hust_login-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: hust_login-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 18.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for hust_login-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fbaf0abaea8442949fa05571cb7f6b14b2955715078788007fb9dda3d515685d
MD5 e60f2c2f556c21963a1e656d4fce8e38
BLAKE2b-256 09fd4edda117c89d3ec9a936e4398c05bc9def0e4bccaf65b3725c11a596b9c4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page