一篇拿来记录的文章,是看其他博主写的,想在这记一下

  import sys

  import time

  import requests

  from PIL import Image

  import json

  import os

  import Headers

  import SessionUtil

  import UrlUtils

  class Ticket(object):

  def __init__(self):

  self.answer = {

  "1": "40,40",

  "2": "110,40",

  "3": "180,40",

  "4": "260,40",

  "5": "40,120",

  "6": "110,120",

  "7": "180,120",

  "8": "260,120",

  }

  self.answer_code=''

  self.tk = ''

  def getDEVICEID(self):

  r = requests.get(UrlUtils.DEVICE_url, headers=Headers.BaseHead).text

  try:

  dic = json.loads(r[18:-2].replace(" ", ""))

  except Exception:

  return ""

  return dic

  # 初始化 获取设备id 设置为cookie 必须

  def initialize(self):

  dic = self.getDEVICEID()

  if dic == "":

  print("网络获取指纹失败!使用默认id")

  RAIL_EXPIRATION = "1576651914389"

  RAIL_DEVICEID = "lBJStCNl0YGo_HVkGtwOo2LWziXcwzpIk5gc2vAILNYdRfaeZ04nJtZ1JZwgQIssMDksn10rAz6Hz-bekeufhAusaKJId8f2BCg05ocgrzc8-chv8h4IB-lQ9H04XjLXr2fbnHw-SLZga3PewEfgPz2s-mhp7NAz"

  else:

  print("网络获取指纹成功!")

  RAIL_EXPIRATION = dic["exp"]

  RAIL_DEVICEID = dic['dfp']

  SessionUtil.setCookie("RAIL_EXPIRATION", RAIL_EXPIRATION)

  SessionUtil.setCookie("RAIL_DEVICEID", RAIL_DEVICEID)

  def conf(self):

  res = SessionUtil.session.post(url=UrlUtils.Conf_url, data=None, headers=Headers.ConFHeader)

  def uamtkstatic(self):

  data = {

  'appid': 'otn'

  }

  SessionUtil.session.post(url=UrlUtils.UamtkStatic_url, data=data, headers=Headers.UamtkStaticHead)

  def get_img_code(self):

  try:

  img = SessionUtil.session.get(url=UrlUtils.Down_mg_url, headers=Headers.BaseHead).content

  with open('code.jpg', 'wb') as f:

  f.write(img)

  except Exception:

  print("下载图片错误! 等待重试~~")

  time.sleep(1)

  self.get_img_code()

  def check_img(self):

  try:

  Image.open('code.jpg').show()

  except Exception:

  time.sleep(2)

  Image.open('code.jpg').show()

  print("+---1-------+----------+----------+----------+")

  print("| 1 | 2 | 3 | 4 |")

  print("|----------|----------|----------|----------|")

  print("| 5 | 6 | 7 | 8 |")

  print("+----------+----------+----------+----------+")

  input_code = input("请在1—8中选择输入验证图片编号,以半角','隔开。(例如:1,3,5):")

  answer_code = ''

  try:

  for i in input_code.split(','):

  answer_code += ',' + self.answer[i] if (i is not input_code[0]) else self.answer[i]

  except Exception as e:

  print('输入错误请重新输入!')

  self.check_img()

  data = {

  'answer': answer_code,

  'rand': 'sjrand',

  'login_site': 'E',

  }

  response = SessionUtil.session.get(url=UrlUtils.Check_img_url, params=data, headers=Headers.BaseHead, )

  check_result = json.loads(response.text)

  print(check_result)

  try:

  if check_result['result_code'] == '4':

  print('*' * 20 + '验证码正确' + '*' * 20)

  self.answer_code=answer_code

  else:

  self.get_img_code()

  self.check_img()

  except Exception:

  self.get_img_code()

  self.check_img()

  # 校验密码正确

  def login(self, answer_code):

  user = ''

  password = ''

  try:

  with open("user.conf", "r", encoding="utf-8") as f:

  user = f.readline().strip().replace("[", '').replace("]", '').replace("name=", '')

  password = f.readline().strip().replace("[", '').replace("]", '').replace("pwd=", '')

  if user == "" or password == "":

  raise Exception

  except Exception:

  user = input("账号____:")

  password = input("密码____:")

  formdata = {

  'username': user,

  'password': password,

  'appid': 'otn',

  'answer': answer_code

  }

  login_result = SessionUtil.session.post(url=UrlUtils.Login_url, data=formdata, headers=Headers.BaseHead)

  login_result.encoding = 'utf-8'

  login_result = login_result.json()

  print(login_result)

  if login_result["result_code"] != 0: #{'result_message': '登录名不存在。', 'result_code': 1}

  sys.exit(0)

  # 二次校验

  def userLogin(self):

  # 获取一系列的cookie值才能真正的登录成功

  response = SessionUtil.session.get(url=UrlUtils.UserLogin_url, headers=Headers.UserLoginHead)

  # 更新JSESSIONID route

  response = SessionUtil.session.get(url=UrlUtils.Redirect_UserLogin_Url, headers=Headers.RedirectHead)

  def uamtk(self):

  # 获取 tk 下一个请求需要提交 tk 值

  data = {'appid': 'otn'}

  uamtk_page = SessionUtil.session.post(url=UrlUtils.Uamtk_url, data=data, headers=Headers.UamtkHeader)

  uamtk_page.encoding = 'utf-8'

  try:

  result = uamtk_page.json()

  print(result)

  if result['result_code'] != 0:

  raise Exception(result['result_message'])

  tk = result['newapptk']

  self.tk = tk

  except Exception:

  print("获取tk失败!")

  print("重试")

  self.run()

  def Uamauthclient(self):

  data = {'tk': self.tk}

  response = SessionUtil.session.post(url=UrlUtils.Uamauthclient_url, data=data,

  headers=Headers.UamauthclientHeader)

  res = response.text

  try:

  dic = json.loads(res)

  print(dic)

  print(dic["username"] + ",欢迎登录!")

  except:

  print("登录失败!")

  self.run()

  # '{"result_code":0,"result_message":"验证通过","username":"XXX","apptk":"36yslXHez3_68-LtHvhI61mZkranjdw6kT9j4UMwEqrw1w0"}'

  def saveCookie(self):

  SessionUtil.save_cookies("12306cookies.txt")

  def getInfo(self):

  try:

  re = SessionUtil.session.post("https://kyfw.12306.cn/otn/modifyUser/initQueryUserInfoApi",

  headers=Headers.UserInfoHead)

  print(re.text)

  except:

  print("获取失败")

  def run(self):

  self.initialize()

  self.conf()

  self.uamtkstatic()

  self.get_img_code()

  self.check_img()

  self.login(self.answer_code)

  self.userLogin()

  self.uamtk()

  self.Uamauthclient()

  self.saveCookie()

  self.conf()

  self.getInfo()

  if __name__ == '__main__':

  t = Ticket()

  result = "":

  try:

  with open("12306cookies.txt", "r", encoding="utf-8") as fr:

  result = fr.read()

  except Exception:

  pass

  if result != "":

  SessionUtil.load_cookies("12306cookies.txt")

  t.initialize()

  t.conf()

  t.uamtkstatic()

  t.userLogin()

  t.uamtk()

  t.Uamauthclient()

  t.getInfo()

  else:

  t.run()

  Headers:

  BaseHead = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",

  "Host": "kyfw.12306.cn",

  "Referer": "https://kyfw.12306.cn/otn/resources/login.html"

  }郑州做人流手术要多少钱 http://www.sptdnk.com/

  UserLoginHead = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",

  'Content-Type': 'application/x-www-form-urlencoded',

  'Referer': 'https://kyfw.12306.cn/otn/resources/login.html',

  'Upgrade-Insecure-Requests': '1',

  'Accept-Encoding': 'gzip, deflate, br',

  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

  }

  RedirectHead = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",

  'Referer': 'https://kyfw.12306.cn/otn/resources/login.html',

  'Upgrade-Insecure-Requests': '1',

  'Accept-Encoding': 'gzip, deflate, br',

  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

  }

  UamtkHeader = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",

  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

  'Referer': 'https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin',

  'Accept-Encoding': 'gzip, deflate, br',

  'Accept': r'application/json, text/javascript, */*; q=0.01',

  'Origin': 'https://kyfw.12306.cn'

  }

  UamauthclientHeader = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",

  "Host": "kyfw.12306.cn",

  'Referer': r'https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin',

  }

  ConFHeader = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",

  "Host": "kyfw.12306.cn",

  "Referer": "https://kyfw.12306.cn/otn/resources/login.html"

  }

  UamtkStaticHead = {

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",

  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

  'Referer': 'https://kyfw.12306.cn/otn/resources/login.html',

  }

  UserInfoHead = {

  "Accept": "*/*",

  "Accept-Encoding": "gzip, deflate, br",

  "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",

  "Cache-Control": "no-cache",

  "Connection": "keep-alive",

  "Content-Length": "0",

  "Host": "kyfw.12306.cn",

  "Origin": "https://kyfw.12306.cn",

  "Pragma": "no-cache",

  "Referer": "https://kyfw.12306.cn/otn/view/information.html",

  "Sec-Fetch-Mode": "cors",

  "Sec-Fetch-Site": "same-origin",

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",

  "X-Requested-With": "XMLHttpRequest",

  }

  SessionUtil

  import requests

  import urllib3

  from http import cookiejar

  urllib3.disable_warnings()

  session = requests.Session()

  session.verify = False # 取消验证 SSL

  def setCookie(key,value):

  session.cookies.set(key,value)

  def removeCookies(key=None):

  session.cookies.set(key, None) if key else session.cookies.clear()

  def load_cookies(cookie_path="12306cookies.txt"):

  load_cookiejar = cookiejar.LWPCookieJar()

  load_cookiejar.load(cookie_path, ignore_discard=True, ignore_expires=True)

  load_cookies = requests.utils.dict_from_cookiejar(load_cookiejar)

  session.cookies = requests.utils.cookiejar_from_dict(load_cookies)

  def save_cookies(cookie_path="12306cookies.txt"):

  new_cookie_jar = cookiejar.LWPCookieJar(cookie_path)

  requests.utils.cookiejar_from_dict({c.name: c.value for c in session.cookies}, new_cookie_jar)

  new_cookie_jar.save(cookie_path, ignore_discard=True, ignore_expires=True)

  UrlUtils

  import time

  DEVICE_url= 'https://kyfw.12306.cn/otn/HttpZF/logdevice?algID=cS6Aw4inWV&hashCode=lZGX9bmwQGHuZPviiiBCrtoNPyHZ4pBG3jvF2dybZ6o&FMQw=0&q4f3=zh-CN&VySQ=FGGxHVb3AzlSM-oikvoZfGsTbD48DQud&VPIf=1&custID=133&VEek=unknown&dzuS=32.0 r0&yD16=0&EOQP=38437f3289ca7a613bb292a3de0dba2b&jp76=df7f80581243b062f0c64efc90666cd0&hAqN=Win32&platform=WEB&ks0Q=7523081fcf2454464b148398defb390a&TeRS=864x1536&tOHY=24xx864x1536&Fvje=i1l1o1s1&q5aJ=-8&wNLf=99115dfb07133750ba677d055874de87&0aew=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36&E3gR=7a13398746be6f51fe069c8a25001f12×tamp=' + str(round(time.time() * 1000))

  #验证码下载地址

  Down_mg_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&{}'.format(int(time.time() * 1000))

  #验证码 验证地址

  Check_img_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'

  #登录地址 校验账号密码

  Login_url = 'https://kyfw.12306.cn/passport/web/login'

  #二次校验

  UserLogin_url = 'https://kyfw.12306.cn/otn/login/userLogin'

  #重定向二次校验

  Redirect_UserLogin_Url = 'https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin'

  #获取 tk关键 url

  Uamtk_url = 'https://kyfw.12306.cn/passport/web/auth/uamtk'

  # 使用tk 校验

  Uamauthclient_url = 'https://kyfw.12306.cn/otn/uamauthclient'

  #使用cookie直接 请求这个就可以访问 api

  Conf_url = 'https://kyfw.12306.cn/otn/login/conf'

  UamtkStatic_url = 'https://kyfw.12306.cn/passport/web/auth/uamtk-static'

  initMy12306Api_url="https://kyfw.12306.cn/otn/index/initMy12306Api"[/mw_shl_code]

  免责声明:仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

用python登录12306 并保存cookie的更多相关文章

  1. FormsAuthentication 登录兼容 IE11 保存cookie

    现象:使用FormsAuthentication进行登录验证,在IE11客户端无法保存cookie 解决方法:在web.config中的forms中增加cookieless="UseCook ...

  2. Python爬虫教程-14-爬虫使用filecookiejar保存cookie文件(人人网)

    Python爬虫教程-14-爬虫使用filecookiejar保存cookie文件(人人网) 上一篇介绍了利用CookieJar访问人人网,本篇将使用filecookiejar将cookie以文件形式 ...

  3. python+pytest接口自动化(9)-cookie绕过登录(保持登录状态)

    在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理:再者,每次请求接口 ...

  4. Android WebView保存Cookie登录

    因项目需要,需要在App中嵌入网页,使用Nativie方式登录,然后将cookie保存到WebView中,实现免登录功能.同步Cookie到WebView的方法网上有大量的参考资料,也可以参考下面的代 ...

  5. python爬虫 - Urllib库及cookie的使用

    http://blog.csdn.net/pipisorry/article/details/47905781 lz提示一点,python3中urllib包括了py2中的urllib+urllib2. ...

  6. 使用 Python 登录网站(转)

    对于大部分论坛,我们想要抓取其中的帖子分析,首先需要登录,否则无法查看. 这是因为 HTTP 协议是一个无状态(Stateless)的协议,服务器如何知道当前请求连接的用户是否已经登录了呢?有两种方式 ...

  7. [转]关于NTLM认证的.NET,php,python登录

    本文转自:http://www.cnblogs.com/myx/archive/2013/03/25/php-ntlm-python-net.html 早期SMB协议在网络上传输明文口令.后来出现 L ...

  8. 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)

    代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...

  9. Python爬虫入门六之Cookie的使用

    大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在 ...

随机推荐

  1. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  2. 重启电脑 wamp图标是橙色(未变绿)

    记录一个错误: 修复系统漏洞后,重启电脑,wamp没有开机自启动,手动启动后发现,图标是大红色变成了橙色,也就是服务未完全启动(1/2)状态. ??? 但是我其实也不知道是哪个服务(Apache/My ...

  3. 【CobaltStrike】对CobaltStrike内置功能模块的了解

    对CobaltStrike内置功能模块的了解 0x00 右键功能列表 Interact 打开beacon Access dump hashes 获取hash Elevate 提权 Golden Tic ...

  4. 利用开源软件自建WAF系统--OpenResty+unixhot

    目录 介绍 安装Openresty 修改nginx.conf 部署WAF 测试WAF 简介:利用OpenResty+unixhot自建WAF系统 介绍   OpenResty是一个基于 Nginx 与 ...

  5. day77_10_24分页器

    一.偏移分页器. 在偏移分页器中,limit代表的是一次性显示的条数,而offset代表的是他基于开头的偏移量. from rest_framework.pagination import Limit ...

  6. 线程休眠sleep

    一.sleep的作用 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线程休 ...

  7. leetcode 分类

    https://www.douban.com/note/330562764/ https://blog.csdn.net/Irving_zhang/article/details/78835035 h ...

  8. 检索式chatbot:

    小夕从7月份开始收到第一场面试邀请,到9月初基本结束了校招(面够了面够了T_T),深深的意识到今年的对话系统/chatbot方向是真的超级火呀.从微软主打情感计算的小冰,到百度主打智能家庭(与车联网? ...

  9. 洛谷P3455 [POI2007]ZAP-Queries

    题目大意: 给定\(n,m,k,\) 求 \[\sum\limits_{x=1}^n\sum\limits_{y=1}^m[gcd(x,y)==k]\] 莫比乌斯反演入门题,先进行一步转化,将每个\( ...

  10. ORB-SLAM2 地图保存

    一.简介 在ORB-SLAM2的System.h文件中,有这样一句话:// TODO: Save/Load functions,让读者自己实现地图的保存与加载功能.其实在应用过程中很多场合同样需要先保 ...