python 12306登录_Python 实现12306登录功能实例代码

下面一段代码给大家带来了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 实现12306登录功能实例代码

本文地址: http://www.cppcns.com/jiaoben/python/220326.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值