Skip to content

Instantly share code, notes, and snippets.

@takidog
Created October 11, 2020 16:42
Show Gist options
  • Save takidog/5c29852a9e277cd6d720aadea9eac4d4 to your computer and use it in GitHub Desktop.
Save takidog/5c29852a9e277cd6d720aadea9eac4d4 to your computer and use it in GitHub Desktop.
import requests
import hashlib
from lxml import etree
HOST = "https://sso.wzu.edu.tw"
CAPTCHA_DICT = {
"9bcd5ab8fc729c83bdbbc784e3002d2f": "3",
"543cd21e5aaa43d056d8068654c54b9a": "4",
"5b24f8c135fee3ae3b14a1b9d0594704": "5",
"2e81195ea486bd3704e94d8738cce591": "6",
"88a220af9e880ed9089f64067a09e9b3": "7",
"961ad1052e35d01d1a0cafc0917183a9": "8",
"ed6b4795dd09ba4aab1d728657ac825a": "a",
"ada5aca56c49ebdd600af0e74f1b91fd": "d",
"f2a05ef72e154278ab4e6665d5200458": "e",
"9f729a736e3590d919d52ae4c6bc2346": "f",
"51203198720eb3c05e5acf73f209c285": "h",
"969f09793ed0900a9d86768f013446c5": "i",
"4d12aa55f5402f24a86cf848ccbdaad7": "m",
"a41049298340e857d905972dca4d4732": "n",
"de5ad6fec2d3e65cabdc79077aff44fd": "r",
"9197aa82ba8921840737c118d1a12f79": "t"
}
def get_md5(data: bytes):
md5_object = hashlib.md5()
md5_object.update(data)
return md5_object.hexdigest()
def get_captcha_text(session: requests.session, login_page_html: str):
# parse image url
root = etree.HTML(login_page_html)
single_captcha_text_dom = root.xpath(
'//span[@id="table1"]/img[@border="0"]')
result = ""
for i in single_captcha_text_dom:
# get image file on single session
image_request = session.get(f"{HOST}{i.get('src')}")
result += CAPTCHA_DICT[get_md5(image_request.content)]
return result
def login(session: requests.session, username: str, password: str) -> bool:
login_page_url = f'{HOST}/Portal/login.htm'
login_page_request = session.get(url=login_page_url)
if login_page_request.status_code != 200:
return False
# get captcha text part
form_captcha_text = get_captcha_text(session=session,
login_page_html=login_page_request.text)
# print(captcha_text)
# get SYSTEM_MAGICNUMBER
root = etree.HTML(login_page_request.text)
form_system_magicnumber = root.xpath(
'//input[@name="SYSTEM_MAGICNUMBER"]')[0].get('value')
# login request
login_request = session.post(url=f'{HOST}/Portal/loginprocess',
data={
'USERID': username,
'PASSWD': password,
'SYSTEM_MAGICNUMBERTEXT': form_captcha_text,
'SYSTEM_MAGICNUMBER': form_system_magicnumber
},
allow_redirects=False)
if login_request.status_code == 302:
return True
return False
if __name__ == "__main__":
# session
session = requests.session()
login_request_status = login(session=session,
username='',
password='')
print("login status: ", login_request_status)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment