python 12306登录_基于Python3的12306登录实现
#-*- 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登录实现相关推荐
- 12306登录python_基于Python3的12306登录实现
#-*- coding: utf-8 -*- importsys sys.path.append("..")importrequests, jsonfrom common.base ...
- python逗号代码_基于Python3 逗号代码 和 字符图网格(详谈)
逗号代码 假定有下面这样的列表: spam=['apples','bananas','tofu',' cats'] 编写一个函数,它以一个列表值作为参数,返回一个字符串.该字符串包含所有表项,表项之间 ...
- python代码检查工具_基于Python3的漏洞检测工具 ( Python3 插件式框架 )
[TOC] Python3 漏洞检测工具 -- lance lance, a simple version of the vulnerability detection framework based ...
- python获取app信息的库_基于python3抓取pinpoint应用信息入库
这篇文章主要介绍了基于python3抓取pinpoint应用信息入库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pinpoint是用Java编写 ...
- python爱因斯坦的问题_基于Python3的趣味数学问题
基于Python3的趣味数学问题 Pro1. 数独(Sudoku)根据九宫格盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个宫(3*3)内的数字均含1-9这9个数字. Pro2 ...
- python typing与之配合_基于Python3(Autosub)以及Ffmpeg配合GoogleTranslation为你的影片实现双语版字幕(逐字稿)...
为影片加字幕其实是一件非常耗费时间的事情,尤其是对于打字慢的朋友来说.当然不光为影片加字幕,在其他领域,类似的逐字稿也是工作中避免不了的内容.比如写论文,如果内容中有访谈,就必须要附上逐字稿,又或者是 ...
- Python实例大全(基于Python3.7.4)
文章目录 博客说明: 基础知识 001.Hello,World Python2.7能够正常输出py2.py3 Python3.7无法正常输出py2,版本不兼容 002.CircularStatemen ...
- 基于python爬虫数据处理_基于Python爬虫的校园数据获取
苏艺航 徐海蛟 何佳蕾 杨振宇 王佳鹏 摘要:随着移动时代的到来,只适配了电脑网页.性能羸弱的校园教务系统,已经不能满足学生们的移动查询需求.为此,设计了一种基于网络爬虫的高实用性查询系統.它首先通过 ...
- python3类的继承详解_基于python3 类的属性、方法、封装、继承详解
下面小编就为大家带来一篇基于python3 类的属性.方法.封装.继承实例讲解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Python 类 Python中的类提供了 ...
最新文章
- 关于学习Python的一点学习总结(17->print打印参数及导入时重命名)
- NR 5G 密钥与安全详解
- C++: int int int * int**的区别、联系和用途
- mvc3中正确处理ajax访问需要登录的页面
- java基础篇——包
- 源码编译wget问题解决
- LeetCode 647 回文子串
- Laravel 实现任务调度功能
- 从无线安全到内网渗透(转)
- 如何优雅地制作精排 ePub —— 个人电子书制作规范及基本样式表
- 微信商户中查看 appid
- “橙子”还是“橙汁”,这是一个问题
- NEXMO 发送国际短信,遇到的问题
- 关于无法安装.NET Framework3.5的问题(0x800F081F)
- 【AWS+Drupal应用案例】如何让一个千万级流量网站从一直挂机到起死回生?
- 制作用于图像语义分割训练的标签数据【图像分割】【labelme】
- three - 3 - 基础知识(1. three渲染结构,2.对canvas 进行响应式布局,3.让canvas 画布自适应设备分辨率 )
- jstack排查cpu使用率过高
- Java——静态方法
- 企业培训视频如何防止被下载和盗用?
热门文章
- IP地址和MAC 地址
- 跟我一起从零学习安卓逆向分析
- html 下拉菜单自动填充,下拉框自动实现自动填充
- wannier拟合能带总是拟合不上_VASP+Wannier90方法拟合单层MoS2的能带,请问如何改善拟合结果?...
- 雷电模拟器设置在WiFi设置代理不生效
- [渝粤教育] 上海师范大学 英汉互译 参考 资料
- python爬虫入门——13行代码制作英语翻译器教程,小白入门一点通
- python vba 审计_审计工作中有哪些 Excel VBA 的应用?
- Ubuntu下配置FreeRADIUS + PPTP/L2TP + Mysql + daloRADIUS
- 快准全!极光iAPP在手,APP动态全都有