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
| import re,requests,base64 def aui(indexs): amap = { '1': '34,40', '2': '111,43', '3': '180,40', '4': '254,40', '5': '34,120', '6': '111,120', '7': '180,120', '8': '254,120', }
temp =[] for item in indexs: temp.append(amap[item]) return ','.join(temp) session = requests.Session() session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' session_url = 'https://kyfw.12306.cn/otn/login/conf' session.post(session_url) captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand&1542247405099&callback=jQuery19105989645797476608_1542247401866&_=1542247401867' captcha_base64 = session.get(captcha_url) captcha_encode = re.findall(r'"image":"(.*?)"', captcha_base64.text)[0] captcha_img = base64.b64decode(captcha_encode) with open('captcha.png', 'wb') as f: f.write(captcha_img) check_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check?callback=jQuery1910937049112524313_1542250866358&rand=sjrand&login_site=E&_=1542250866360'
check_response = session.get(check_url,params={'answer':aui(input('请输入坐标图片序号:'))}) ###传入图片坐标 check_code = re.findall(r'"result_code":"(\d)"',check_response.text)[0] if check_code == '4': print('1.验证码效验成功') login_url = 'https://kyfw.12306.cn/passport/web/login' data_user = { 'username':input('请输入你的用户名:'), 'password':input('请输入你的密码:'), 'appid':'excater' } login_sucess = session.post(login_url,data=data_user) # print(login_sucess.text) if login_sucess.json()['result_code'] == 0: print('2.用户名和密码校验成功!') tk_url = 'https://kyfw.12306.cn/passport/web/auth/uamtk' tk_url_post =session.post(tk_url,data={'appid': 'excater'}) if tk_url_post.json()['result_code'] == 0: print("3.tk效验成功") check_tk_url = 'https://exservice.12306.cn/excater/uamauthclient' check_tk_post = session.post(check_tk_url,data={'tk':tk_url_post.json()['newapptk']}) print(check_tk_post.text)
|