Python 实现12306登录功能实例代码


Posted in Python onFebruary 09, 2018

下面一段代码给大家带来了python实现12306登录功能,具体代码如下所示:

#!/usr/bin/env python
import requests
import urllib.parse
import random
import time
req = requests.session()
import sys
import re
import urllib3
import getpass # 密文输入
urllib3.disable_warnings()
# 登陆-------------------------
apptklist = []
newStrList = []
def signin():
 ran = random.uniform(1, 0)
 imgUrl = ('https://kyfw.12306.cn/passport/captcha/captcha-image?'
    'login_site=E&module=login&rand=sjrand&%s' % ran)
 print(imgUrl)
 imgresponse = req.get(url=imgUrl, verify=False)
 codeimg = imgresponse.content
 fn = open('code.png', 'wb')
 fn.write(codeimg)
 fn.close()
 codeStr = input('请输入验证码的坐标:')
 a = ''
 b = ''
 c = ''
 d = ''
 e = ''
 f = ''
 g = ''
 h = ''
 if '1' in codeStr:
  a = '37,37,'
 if '2' in codeStr:
  b = '100,37,'
 if '3' in codeStr:
  c = '180,37,'
 if '4' in codeStr:
  d = '250,37,'
 if '5' in codeStr:
  e = '37,100,'
 if '6' in codeStr:
  f = '100,100,'
 if '7' in codeStr:
  g = '180,100,'
 if '8' in codeStr:
  h = '250,100,'
 newCodeStr = a+b+c+d+e+f+g+h
 newStr = newCodeStr[:-1]
 newStrList.append(newStr)
 url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'
 data = {
  'answer':newStr,
  'login_site':'E',
  'rand':'sjrand'
 }
 headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
      ' Chrome/63.0.3239.108 Safari/537.36',
 }
 response = req.post(url=url, data=data, headers=headers, verify=False)
 print('检测图片-----------', url)
 print(response.text)
 result = response.json()
 if result['result_code'] == '4':
  print('验证码校验成功')
 else:
  print('验证码校验失败,请注意填写正确的坐标')
  signin()
  return
 userName = input('Please input your userName:')
 # password = input('Please input your password:')
 password = getpass.getpass('Please input your password:')
 loginData = {
  'username':userName,
  'password':password,
  'appid':'otn'
 }
 headers = {
  'Host':'kyfw.12306.cn',
  'Referer':'https://kyfw.12306.cn/otn/login/init',
  'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2)'
      ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 '
      'Safari/537.36'
 }
 response = req.post('https://kyfw.12306.cn/passport/web/login', data=loginData, headers=headers, verify=False)
 print('--------------登陆中--------------------')
 print('https://kyfw.12306.cn/passport/web/login')
 print('response', response.text.encode('utf-8').decode('utf-8'))
 fd = open("locate.html", 'wb+')
 fd.write(response.content)
 yzData = {
  'appid':'otn'
 }
 response = req.post('https://kyfw.12306.cn/passport/web/auth/uamtk', data=yzData, headers=headers, verify=False)
 print('---------------------第一次验证---------------------')
 print(response.text)
 # print('typeof response',type(response))
 loginMessage = response.json()['newapptk']
 print('loginMessage=', loginMessage)
 # 第二次验证开始++++++++++++++++++++++++++++++
 yz2Data = {
  'tk': loginMessage
 }
 response = req.post('https://kyfw.12306.cn/otn/uamauthclient', data=yz2Data, headers=headers,verify=False)
 print('---------------------第二次验证---------------------')
 print(response.text)
 apptk = response.json()['apptk']
 apptklist.append(apptk)
def buy():
 print(newStrList)
 req.headers['Referer'] = 'https://kyfw.12306.cn/otn/leftTicket/init'
 result = req.post('https://kyfw.12306.cn/otn/login/checkUser')
 print('----------------购票系统--------------')
 print(result.text)
 print('验证登录状态成功checkUser')
 headers = {
  'Referer':'https://kyfw.12306.cn/otn/leftTicket/init',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36'
      ' (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
 }
 data = {
  # 'secretStr':reserve[1],
  'train_date':'2018-01-17',
  'back_train_date':'2018-01-17',
  'tour_flag':'dc', # dc 单程
  'purpose_codes':'ADULT', # adult 成人票
  'query_from_station_name':'成都',
  'query_to_station_name':'长沙',
  'undefined':''
 }
def ticket():
 # 先登陆、然后查询车票信息
 signin()
 url = ('https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2018-02-10&'
   'leftTicketDTO.from_station=SZQ&leftTicketDTO.to_station=NFG&purpose_codes=ADULT')
 try:
  response = requests.get(url, verify=False)
  result = response.json()
  print(result)
  return result['data']['result']
 except Exception as e:
  return None
if __name__ == "__main__":
 # ticket()
 # with open('./aaa.xlsx', encoding='utf-8') as f:
 #
 #  print(f.read())
 dic = {}
 context = [('IDS_ABOUT_OFFICAL_PHONE', 'Službeni telefon'),
    ('IDS_ABOUT_OFFICAL_WEBSITE', 'Službeno web-mjesto'),
    ('IDS_ABOUT_OFFICIAL_PHONE_CALL_NOT_SUPPORT', 'Trenutni uređaj ne može pozivati.')]
 for i in range(len(context)):
  print(i)
  dic.setdefault(context[i][0],context[i][1])
 print(dic)
 print(dic.keys())

总结

以上所述是小编给大家介绍的Python 实现12306登录实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python里大整数相乘相关技巧指南
Sep 12 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
django表单的Widgets使用详解
Jul 22 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
90行Python代码开发个人云盘应用
Apr 20 Python
pandas求平均数和中位数的方法实例
Aug 04 Python
Python多层装饰器用法实例分析
Feb 09 #Python
理论讲解python多进程并发编程
Feb 09 #Python
Python装饰器(decorator)定义与用法详解
Feb 09 #Python
详解python的ORM中Pony用法
Feb 09 #Python
python监控键盘输入实例代码
Feb 09 #Python
Python with语句上下文管理器两种实现方法分析
Feb 09 #Python
Python遍历pandas数据方法总结
Feb 09 #Python
You might like
坏狼的PHP学习教程之第2天
2008/06/15 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
javascript 函数使用说明
2010/04/07 Javascript
web前端开发也需要日志
2010/12/09 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
Python常见异常分类与处理方法
2017/06/04 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
ubuntu上安装python的实例方法
2019/09/30 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
python基于event实现线程间通信控制
2020/01/13 Python
详解Flask前后端分离项目案例
2020/07/24 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
儿科护士实习自我鉴定
2013/10/17 职场文书
国际贸易专业推荐信
2013/11/15 职场文书
搞笑征婚广告词
2014/03/17 职场文书
亲属关系公证书
2014/04/08 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
合作协议书格式
2014/08/19 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
科级干部培训心得体会
2016/01/06 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
小学教代会开幕词
2016/03/04 职场文书