#-*- coding: utf-8 -*-

importsys

sys.path.append("..")importrequests, jsonfrom common.base importBasefrom requests.packages.urllib3.exceptions importInsecureRequestWarning#禁用安全请求警告

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)__author__ = 'Rachel feng'PATH= 'https://kyfw.12306.cn'

__all__ = ['LoginTic']classLoginTic(Base):def __init__(self):

super(LoginTic, self).__init__()#验证结果

defcheckYanZheng(self,solution):## 分割用户输入的验证码位置

#225,83|181,31|35,67 => 225,83,181,31,35,67

yanStr = solution.replace('|',',')print('校验验证码......')

checkUrl= "https://kyfw.12306.cn/passport/captcha/captcha-check"data={'login_site':'E', #固定的

'rand':'sjrand', #固定的

'answer':yanStr #验证码对应的坐标,两个为一组,跟选择顺序有关,有几个正确的,输入几个

}print(data)#发送验证

cont = self.requests.post(checkUrl, data=data, verify=False)#返回json格式的字符串,用json模块解析

dic =cont.json()

code= dic['result_code']#取出验证结果,4:成功 5:验证失败 7:过期

if str(code) == '4':returnTrueelse:print(dic)returnFalse#发送登录请求的方法

defloginTo(self, userName, pwd):

yan=self.decode_captcha(url)

check=False##只有验证成功后才能执行登录操作

#while not check:

check =self.checkYanZheng(yan)if notcheck:return 600, '验证失败,请重新验证'loginUrl= "https://kyfw.12306.cn/passport/web/login"data={'username':userName,'password':pwd,'appid':'otn'}print(data)

headers={'Origin': 'https://kyfw.12306.cn','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36','Referer': 'https://kyfw.12306.cn/otn/login/init','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Accept': 'application/json, text/javascript, */*; q=0.01'}

result= self.requests.post(loginUrl,data=data,headers=headers)

dic=result.json()print(dic)

mes= dic['result_message']#结果的编码方式是Unicode编码,所以对比的时候字符串前面加u,或者mes.encode('utf-8') == '登录成功'进行判断,否则报错

if mes == u'登录成功':#获取cookie

r = self.requests.post('https://kyfw.12306.cn/otn/login/userLogin')

data= {'appid': 'otn'}

r= self.requests.post('https://kyfw.12306.cn/passport/web/auth/uamtk', data=data)if r.status_code != 200:return 600, '登录验证不通过'd=r.json()if d.get('result_code') ==0:

data={'tk': d.get('newapptk')

}

r= self.requests.post('https://kyfw.12306.cn/otn/uamauthclient', data=data)

d=r.json()print(d)if d.get('result_code') ==0:print('恭喜你,登录成功,可以购票!')returnTrueelse:return 600, d.get('result')else:print(dic.get('result_message'))return 600, dic.get('result_message')defget_info(self):

data= {'_json_att': ''}

headers={'Referer': 'https://kyfw.12306.cn/otn/index/initMy12306','Origin': 'https://kyfw.12306.cn','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded'}

r= self.requests.post('https://kyfw.12306.cn/otn/modifyUser/initQueryUserInfo', data=data, headers=headers)if r.status_code != 200:print('获取购票人信息异常')

with open('__tmp/userInfo.html', 'wb') as f:

f.write(r.content)

f.close()print('获取信息成功')if __name__ == '__main__':

userName= '’ #12306登录账号

pwd = '' #12306登录密码

url = "https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand";

login=LoginTic()

d=login.loginTo(userName, pwd)if type(d) !=tuple:

login.get_info()else:print(d)

python 12306登录_基于Python3的12306登录实现相关推荐

  1. 12306登录python_基于Python3的12306登录实现

    #-*- coding: utf-8 -*- importsys sys.path.append("..")importrequests, jsonfrom common.base ...

  2. python逗号代码_基于Python3 逗号代码 和 字符图网格(详谈)

    逗号代码 假定有下面这样的列表: spam=['apples','bananas','tofu',' cats'] 编写一个函数,它以一个列表值作为参数,返回一个字符串.该字符串包含所有表项,表项之间 ...

  3. python代码检查工具_基于Python3的漏洞检测工具 ( Python3 插件式框架 )

    [TOC] Python3 漏洞检测工具 -- lance lance, a simple version of the vulnerability detection framework based ...

  4. python获取app信息的库_基于python3抓取pinpoint应用信息入库

    这篇文章主要介绍了基于python3抓取pinpoint应用信息入库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pinpoint是用Java编写 ...

  5. python爱因斯坦的问题_基于Python3的趣味数学问题

    基于Python3的趣味数学问题 Pro1. 数独(Sudoku)根据九宫格盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个宫(3*3)内的数字均含1-9这9个数字. Pro2 ...

  6. python typing与之配合_基于Python3(Autosub)以及Ffmpeg配合GoogleTranslation为你的影片实现双语版字幕(逐字稿)...

    为影片加字幕其实是一件非常耗费时间的事情,尤其是对于打字慢的朋友来说.当然不光为影片加字幕,在其他领域,类似的逐字稿也是工作中避免不了的内容.比如写论文,如果内容中有访谈,就必须要附上逐字稿,又或者是 ...

  7. Python实例大全(基于Python3.7.4)

    文章目录 博客说明: 基础知识 001.Hello,World Python2.7能够正常输出py2.py3 Python3.7无法正常输出py2,版本不兼容 002.CircularStatemen ...

  8. 基于python爬虫数据处理_基于Python爬虫的校园数据获取

    苏艺航 徐海蛟 何佳蕾 杨振宇 王佳鹏 摘要:随着移动时代的到来,只适配了电脑网页.性能羸弱的校园教务系统,已经不能满足学生们的移动查询需求.为此,设计了一种基于网络爬虫的高实用性查询系統.它首先通过 ...

  9. python3类的继承详解_基于python3 类的属性、方法、封装、继承详解

    下面小编就为大家带来一篇基于python3 类的属性.方法.封装.继承实例讲解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Python 类 Python中的类提供了 ...

最新文章

  1. 关于学习Python的一点学习总结(17->print打印参数及导入时重命名)
  2. NR 5G 密钥与安全详解
  3. C++: int int int * int**的区别、联系和用途
  4. mvc3中正确处理ajax访问需要登录的页面
  5. java基础篇——包
  6. 源码编译wget问题解决
  7. LeetCode 647 回文子串
  8. Laravel 实现任务调度功能
  9. 从无线安全到内网渗透(转)
  10. 如何优雅地制作精排 ePub —— 个人电子书制作规范及基本样式表
  11. 微信商户中查看 appid
  12. “橙子”还是“橙汁”,这是一个问题
  13. NEXMO 发送国际短信,遇到的问题
  14. 关于无法安装.NET Framework3.5的问题(0x800F081F)
  15. 【AWS+Drupal应用案例】如何让一个千万级流量网站从一直挂机到起死回生?
  16. 制作用于图像语义分割训练的标签数据【图像分割】【labelme】
  17. three - 3 - 基础知识(1. three渲染结构,2.对canvas 进行响应式布局,3.让canvas 画布自适应设备分辨率 )
  18. jstack排查cpu使用率过高
  19. Java——静态方法
  20. 企业培训视频如何防止被下载和盗用?

热门文章

  1. IP地址和MAC 地址
  2. 跟我一起从零学习安卓逆向分析
  3. html 下拉菜单自动填充,下拉框自动实现自动填充
  4. wannier拟合能带总是拟合不上_VASP+Wannier90方法拟合单层MoS2的能带,请问如何改善拟合结果?...
  5. 雷电模拟器设置在WiFi设置代理不生效
  6. [渝粤教育] 上海师范大学 英汉互译 参考 资料
  7. python爬虫入门——13行代码制作英语翻译器教程,小白入门一点通
  8. python vba 审计_审计工作中有哪些 Excel VBA 的应用?
  9. Ubuntu下配置FreeRADIUS + PPTP/L2TP + Mysql + daloRADIUS
  10. 快准全!极光iAPP在手,APP动态全都有