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 08 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
python中如何使用正则表达式的非贪婪模式示例
Oct 09 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
Python的垃圾回收机制详解
Aug 28 Python
python实现静态web服务器
Sep 03 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
基于opencv实现简单画板功能
Aug 02 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
分享一个python的aes加密代码
Dec 22 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扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
js如何判断输入字符串长度
2015/12/16 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
python3 与python2 异常处理的区别与联系
2016/06/19 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
python numpy 反转 reverse示例
2019/12/04 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
简述DNS进行域名解析的过程
2013/12/02 面试题
技术总监的工作职责
2013/11/13 职场文书
元旦获奖感言
2014/03/08 职场文书
关于幸福的感言
2015/08/03 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
Window server中安装Redis的超详细教程
2021/11/17 Redis
 Python 中 logging 模块使用详情
2022/03/03 Python
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS