1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 COPY import osimport timeimport jsonimport base64import requestsfrom Crypto.Cipher import AESimport reclass XJTUUser (object ): def __init__ (self, config_file_path='./config.json' ): with open (config_file_path) as config_file: config = json.loads(config_file.read()) self.config = config self.is_login = False self.session = requests.Session() self.session.headers.update(config['headers' ]) self.session.cookies.update(config['cookies' ]) def login (self ): def reserve (self,kid,sp ): r = self.session.get('http://rg.lib.xjtu.edu.cn:8010/ruguan' ) nn = r.text.find('<input id="csrf_token" name="csrf_token" type="hidden" value=' ) tok = r.text[nn+1 +len ('<input id="csrf_token" name="csrf_token" type="hidden" value=' ):nn+56 +len ('<input id="csrf_token" name="csrf_token" type="hidden" value=' )] data={ 'csrf_token' :tok, 'csrf_token' :tok, 'service' :'seat' , 'submit' :'%E6%8F%90%E4%BA%A4' , 'rplace' :'east' } r = self.session.post('http://rg.lib.xjtu.edu.cn:8010/ruguan' ,data = data) r = self.session.get('http://rg.lib.xjtu.edu.cn:8010/seat/?kid=' +kid+'&sp=' +sp) return r.status_code def encrypt_pwd (raw_pwd, publicKey='0725@pwdorgopenp' ): ''' AES-ECB encrypt ''' publicKey = publicKey.encode('utf-8' ) BS = AES.block_size pad = lambda s: s + (BS - len (s) % BS) * chr (BS - len (s) % BS) pwd = pad(raw_pwd) ''' pwd = raw_pwd while len(raw_pwd.encode('utf-8')) % 16 != 0: pwd += '\0' ''' cipher = AES.new(publicKey, AES.MODE_ECB) pwd = cipher.encrypt(pwd.encode('utf-8' )) return str (base64.b64encode(pwd), encoding='utf-8' ) _headers = self.config['headers' ] _headers['Content-Type' ] = 'application/x-www-form-urlencoded' _r = self.session.get('http://rg.lib.xjtu.edu.cn:8010/auth/login/?next=%2Fseat%2F' ) self.session.get('https://org.xjtu.edu.cn/openplatform/login.html' ) r_JcaptchaCode = self.session.post('https://org.xjtu.edu.cn/openplatform/g/admin/getJcaptchaCode' , headers=_headers) url = 'https://org.xjtu.edu.cn/openplatform/g/admin/getIsShowJcaptchaCode' params = { 'userName' : self.config['username' ], '_' : str (int (time.time() * 1000 )) } r = self.session.get(url, params=params, headers=_headers) print (r.text) url = 'https://org.xjtu.edu.cn/openplatform/g/admin/login' cookie = { 'cur_appId_' :'JL4oKidbLpQ=' } data = { "loginType" : 1 , "username" : self.config['username' ], "pwd" : encrypt_pwd(self.config['password' ]), "jcaptchaCode" : "" } _headers['Content-Type' ] = 'application/json;charset=UTF-8' r = self.session.post(url, data=json.dumps(data), headers=_headers,cookies=cookie) print (r.text) token = json.loads(r.text)['data' ]['tokenKey' ] cookie = { 'cur_appId_' :'JL4oKidbLpQ=' , 'open_Platform_User' : token } r=self.session.get('http://org.xjtu.edu.cn/openplatform/oauth/auth/getRedirectUrl?userType=1&personNo=2176112723&_=1590998261976' ,cookies = cookie) print (r.text) r=self.session.get(json.loads(r.text)['data' ]) r=self.session.get('http://rg.lib.xjtu.edu.cn:8080/bxusr/link.jsp?uid=gwy867718012&cn=%E9%83%AD%E7%8E%8B%E6%87%BF&employeeNumber=2176112723&depId=%E7%94%B5%E5%AD%90%E4%B8%8E%E4%BF%A1%E6%81%AF%E5%AD%A6%E9%83%A8&email=867718012@qq.com&mobile' ) r_w3=self.session.get('http://rg.lib.xjtu.edu.cn:8010/qseat?sp=west3B' ) r_e3=self.session.get('http://rg.lib.xjtu.edu.cn:8010/qseat?sp=east3A' ) s1 = json.loads(r_e3.text)['seat' ] s2 = json.loads(r_w3.text)['seat' ] while (1 ): for i in s1: if s1[i] == 0 : print (i) if reserve(self,i,'east3A' ) == 200 : print ('三楼东侧侧你的座位号是' +i) exit(0 ) for i in s2: if s2[i] == 0 : print (i) if reserve(self,i,'west3B' ) == 200 : print ('三楼西侧你的座位号是' +i) exit(0 ) time.sleep(2 ) if __name__ == '__main__' : mixcro = XJTUUser() mixcro.login()