12306登录(略详细)

本节代码为登录成功并打印出账户名称

[html]  view plain  copy
  1. #-*-coding:utf-8 -*-  
  2. import urllib2  
  3. import urllib  
  4. # 验证码登录同步  
  5. import cookielib  
  6. import damatuWeb  
  7. import ssl  
  8. from json import loads  
  9. from cons import station_name  
  10. import time  
  11.   
  12. header={  
  13. "Referer":"https://kyfw.12306.cn/otn/leftTicket/init",  
  14. "User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"  
  15. }  
  16.   
  17.   
  18.   
  19. #证书验证  
  20. ssl._create_default_https_context = ssl._create_unverified_context  
  21. # 请求验证码图片  
  22. c=cookielib.LWPCookieJar()#生成一个储存cookie的对象  
  23. cookie=urllib2.HTTPCookieProcessor(c)#绑定  
  24. opener=urllib2.build_opener(cookie)  
  25. urllib2.install_opener(opener)  
  26. # opener绑定,用opener.open请求,自带cookie,实现验证码与登陆同步  
  27. city={}  
  28. for i in station_name.split("@"):  
  29.   
  30.     if  not i:  
  31.         continue  
  32.     tmp_list=i.split("|")  
  33.     city[tmp_list[1]]=tmp_list[2]  
  34.   
  35.   
  36. # print city["长沙"]  
  37. # print city["上海"]  
  38.   
  39. from_station=city["长沙"]  
  40. to_station=city["上海"]  
  41. train_date="2017-11-08"  
  42.   
  43. def getCode():  
  44.     req=urllib2.Request("https://kyfw.12306.cn/passport/captcha/"  
  45.                         "captcha-image?login_site=E&module="  
  46.                         "login&rand=sjrand&0.3835166812770916")  
  47.     codeing=opener.open(req).read()#opener  
  48.     fn=open('code/code.png','wb')  
  49.     #保存到本地  
  50.     fn.write(codeing)  
  51.     fn.close()  
  52. def code():  
  53.     getCode()  
  54.     req=urllib2.Request('https://kyfw.12306.cn/passport'  
  55.                         '/captcha/captcha-check')  
  56.     code=damatuWeb.calcCode()  
  57.     # code=raw_input(">>")  
  58.     print code  
  59.     data={  
  60.     "answer":code,  
  61.     "login_site":"E",  
  62.     "rand":"sjrand",  
  63.     }  
  64.     data=urllib.urlencode(data)#把字典类型转变为查询字符串  
  65.     html=opener.open(req,data=data).read()  
  66.     result=loads(html)  
  67.     if result["result_code"]=="4":  
  68.         print"验证码校验成功!"  
  69.         return True  
  70.     else:  
  71.         print "验证码校验失败"  
  72.         code()  
  73.   
  74. def login():  
  75.     #登录  
  76.     req=urllib2.Request('https://kyfw.12306.cn/passport'  
  77.                         '/web/login')  
  78.   
  79.     data={  
  80.         'username':'test',  
  81.         'password':'test',  
  82.         'appid':'otn',  
  83.     }  
  84.     data = urllib.urlencode(data)  
  85.     html = opener.open(req, data=data).read()  
  86.     result = loads(html)  
  87.     req = urllib2.Request('https://kyfw.12306.cn/passport/web/auth/uamtk')  
  88.     req.headers = header  
  89.     html = opener.open(req, data='appid=otn').read()  
  90.     print html  
  91.     result = loads(html)  
  92.     newapptk = result['newapptk']  
  93.     req = urllib2.Request('https://kyfw.12306.cn/otn/uamauthclient')  
  94.     req.headers = header  
  95.     html = opener.open(req, data='tk=%s' % newapptk).read()  
  96.     print html  
  97.     if result['result_code'] == 0:  
  98.         print '登录成功!'  
  99.         return True  
  100.     else:  
  101.         print '登录失败'  
  102.   
  103. def getTrain():  
  104.     req=urllib2.Request("https://kyfw.12306.cn/otn/leftTicket/query?"  
  105.                         "leftTicketDTO.train_date=%s&leftTicketDTO"  
  106.                         ".from_station=%s&leftTicketDTO.to_station=%s&"  
  107.                         "purpose_codes=ADULT" %(train_date,from_station,to_station))  
  108.     req.headers=header  
  109.     html=opener.open(req).read()  
  110.     try:  
  111.         result = loads(html)  
  112.         return result['data']['result']  
  113.     except Exception,e:  
  114.         time.sleep(2)  
  115.         getTrain()  
  116.   
  117. #下单  
  118. def order(secretStr):  
  119.     #第1个请求  
  120.     req = urllib2.Request('https://kyfw.12306.cn/otn/login/checkUser')  
  121.     html = opener.open(req,data='_json_att=').read()  
  122.     # print html  
  123.     #第2个请求  
  124.     req = urllib2.Request('https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest')  
  125.     data = {  
  126.         'secretStr':secretStr,  
  127.         'train_date':'2017-11-08',  
  128.         'back_train_date':'2017-11-05',  
  129.         'tour_flag':'dc',  
  130.         'purpose_codes':'ADULT',  
  131.         'query_from_station_name':'长沙',  
  132.         'query_to_station_name':'上海',  
  133.         'undefined':''  
  134.     }  
  135.     data = urllib.urlencode(data)  
  136.     req.headers = header  
  137.     html = opener.open(req,data=data)  
  138.     # print html.read()  
  139.     # print html.geturl()  
  140.     req = urllib2.Request('https://kyfw.12306.cn/otn/index/initMy12306')  
  141.     req.headers = header  
  142.     html = opener.open(req).read()  
  143.     print html  
  144.   
  145.   
  146. code()  
  147. login()  
  148. # print getTrain()  
  149. #查票  
  150. for i in getTrain():  
  151.     tmp_list=i.split("|")  
  152.     # tmp_list[3]="车次"  
  153.     # tmp_list[8]="出发时间"  
  154.     # tmp_list[9]="到达时间"  
  155.     # tmp_list[26]="无座"  
  156.     # tmp_list[29]="硬座"  
  157.     # tmp_list[25]="特等座"  
  158.     # tmp_list[31]="一等座"  
  159.     # tmp_list[30]="二等座"  
  160.     # tmp_list[23]="软卧"  
  161.     secretStr=tmp_list[0]  
  162.     # a=0  
  163.     # for n in tmp_list:  
  164.     #     print "[%s]%s"%(a,n)  
  165.     #     a+=1  
  166.     # break  
  167. # print tmp_list  
  168.     if tmp_list[30]!=u"无" and tmp_list[30]!="":  
  169.         print "有票","车次:",tmp_list[3]  
  170.         break  
  171.     else:  
  172.         print "没票"  
  173.   
  174. # print secretStr  
  175. order(secretStr)  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
12306登录接口测试用例可以包括以下几个方面: 1. 正常登录测试用例:输入正确的用户名和密码,验证是否能够成功登录系统; 2. 错误登录测试用例:输入错误的用户名和密码,验证是否会提示登录失败; 3. 服务器负载测试用例:模拟多个用户同时登录系统,测试系统在高并发情况下是否能够正常处理登录请求; 4. 安全性测试用例:测试系统对于恶意攻击的防护措施,如输入特殊字符、SQL注入等尝试登录; 5. 异常情况测试用例:测试系统在异常情况下的处理能力,如网络不稳定、服务器异常等; 6. 用户体验测试用例:验证登录界面的友好性和易用性,如是否有合适的提示信息、界面是否清晰明了等; 7. 兼容性测试用例:测试不同浏览器、操作系统和设备上的登录功能是否正常; 8. 性能测试用例:测试登录过程的响应时间、吞吐量等指标,以评估系统的性能; 9. 安全验证测试用例:测试系统的登录验证机制,如验证码的正确性和有效性。 通过这些测试用例的执行,可以全面评估12306登录接口的功能、性能和安全性,并发现潜在的问题和风险,以提高用户的使用体验和系统的稳定性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [自动化测试 (一) 12306火车票网站自动登录工具](https://blog.csdn.net/IT_LanTian/article/details/108680552)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值