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中实现三目运算的方法
Jun 21 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
基于数据归一化以及Python实现方式
Jul 11 Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 Python
django富文本编辑器的实现示例
Apr 10 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
python实现在一个画布上画多个子图
Jan 19 Python
Python实现结构体代码实例
Feb 10 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
Python内置函数及功能简介汇总
Oct 13 Python
Python列表元素删除和remove()方法详解
Jan 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
python内置模块collections知识点总结
2019/12/19 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
汽车检测与维修应届毕业生求职信
2013/10/19 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
教师校本培训方案
2014/02/26 职场文书
党员个人公开承诺书
2014/08/29 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
销售内勤岗位职责
2015/02/10 职场文书
评职称个人总结
2015/03/05 职场文书
故意杀人案辩护词
2015/05/21 职场文书
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android