import requests
import execjs
import ddddocr
import re
def get_first_cookie(proxies):
"""
返回向登录首页发送请求返回的cookie # 现在的请求是没有经过服务器校验账号信息的,所以默认返回登录不成功的信息
"""
url = "http://218.75.197.123:83/"
headers = {
'Referer': 'http://jwc.hut.edu.cn/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
cookie = requests.get(url,headers=headers,proxies=proxies).cookies
print(cookie)
JSESSIONID = cookie["JSESSIONID"]
SERVERID = cookie["SERVERID"]
return JSESSIONID,SERVERID
def get_second_cookie(proxies):
"""
第二个url发请求
"""
JSESSIONID,SERVERID = get_first_cookie(proxies)
cookie = f"JSESSIONID={JSESSIONID}; SERVERID={SERVERID}"
url = "http://218.75.197.123:83/Logon.do?method=logon&flag=sess"
headers = {
'Referer': 'http://218.75.197.123:83/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'cookie':cookie
}
resp = requests.post(url,headers=headers,proxies=proxies)
JSESSIONID = resp.cookies["JSESSIONID"]
dataStr = resp.text
# print(dataStr)
# dataStr = "XX72c62n11C329a909E5Kk7f151e62x8F9O2096#23331121123321221231"
return dataStr,cookie,JSESSIONID
def get_RANDOMCODE(cookie,proxies):
"""
识别验证码
:param cookie:
:return:
"""
url = "http://218.75.197.123:83/verifycode.servlet"
headers = {
'Referer': 'http://218.75.197.123:83/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'cookie': cookie
}
# 返回了一张验证码图片,以二进制保存到文件中
resp_jpg_content = requests.get(url,headers=headers,proxies=proxies).content
with open("verifycode.jpg","wb") as f:
f.write(resp_jpg_content)
# 下面是对验证码进行识别
ocr = ddddocr.DdddOcr()
with open("verifycode.jpg","rb") as f2:
img_bytes = f2.read()
randomcode = ocr.classification(img_bytes)
# print(randomcode)
return randomcode
def get_encoded(dataStr,account,password):
"""
获取encoded
"""
scode = dataStr.split("#")[0]
sxh = dataStr.split("#")[1]
code = account+"%%%"+password
# print(code)
encoded = ""
i = 0
while i<len(code):
if i<20:
encoded = encoded + code[i:i+1] + scode[0:int(sxh[i:i+1])]
scode = scode[int(sxh[i:i+1]):len(scode)]
else:
encoded = encoded + code[i:len(code)]
i = len(code)
i += 1
res = encoded.split("%")
# print(res)
result_encoded = "%25".join(res)
# python生成的encoded%后面没有25两个字符,但在请求执行JavaScript代码中%后面多了一个25,所以要补上
# print(result_encoded)
# print(encoded)
# print(result_encoded)
return encoded
def login_cookie1(useraccount,userpassword,proxies):
"""
拿到请求这个URL:http://218.75.197.123:83/Logon.do?method=logon返回来的set-cookie,location
"""
# session = requests.Session()
RANDOMCODE = get_RANDOMCODE(cookie,proxies)
encoded = get_encoded(dataStr,useraccount,userpassword)
print(RANDOMCODE,encoded)
print(cookie_req_2)
url = "http://218.75.197.123:83/Logon.do?method=logon"
headers = {
'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.5',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Length': '131',
'Content-Type': 'application/x-www-form-urlencoded',
'cookie': cookie_req_2,
'Host': '218.75.197.123:83',
'DNT': '1',
'Referer': 'http://218.75.197.123:83/Logon.do?method=logon',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
}
data = {
'userAccount': useraccount,
'userPassword': "",
'RANDOMCODE': RANDOMCODE, # 这个是验证码,暂时不处理
'encoded': encoded
}
resp = requests.post(url,headers=headers,data=data,allow_redirects = False,proxies=proxies) # 不跳转,allow_redirects = False
print(resp.status_code)
resp = resp.headers
print(resp)
def main(SERVERID,JSESSIONID):
url = "http://218.75.197.123:83/jsxsd/framework/xsMain.jsp"
headers = {
'Referer': 'http://218.75.197.123:83/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'Cookie': f'JSESSIONID=769C6B4E9A1BEF0F37011948E709ED3D; SERVERID={SERVERID}; JSESSIONID={JSESSIONID}'
}
resp = requests.get(url,headers=headers)
print(resp.status_code)
if __name__ == '__main__':
# 设置代理IP Python3.7后必须使用proxies={‘http’: ‘http://127.0.0.1:8080’}这种形式
proxies = {
# 'http': 'http://101.200.127.149:3129'
}
# useraccount = input("请输入你的账号:")
# userpassword = input("请输入你的密码:")
useraccount = "" # 账号
userpassword = "" # 密码
dataStr, cookie,JSESSIONID = get_second_cookie(proxies)
SERVERID = re.findall(r"SERVERID=(.*)",cookie)[0]
cookie_req_2 = f"JSESSIONID={JSESSIONID}; SERVERID={SERVERID}"
login_cookie1(useraccount,userpassword,proxies)
# main(SERVERID,JSESSIONID_1)