经过倒腾12306的登录,还是实现了,请求头很重要...各位感兴趣的可以继续写下去.....
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" } 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"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"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"https://kyfw.12306.cn/otn/index/initMy12306Api"[/mw_shl_code]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“python实现12306登录并保存cookie的方法示例”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年10月06日
2024年10月06日
- 群星《前途海量 电影原声专辑》[FLAC/分轨][227.78MB]
- 张信哲.1992-知道新曲与精丫巨石】【WAV+CUE】
- 王翠玲.1995-ANGEL【新艺宝】【WAV+CUE】
- 景冈山.1996-我的眼里只有你【大地唱片】【WAV+CUE】
- 群星《八戒 电影原声带》[320K/MP3][188.97MB]
- 群星《我的阿勒泰 影视原声带》[320K/MP3][139.47MB]
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[320K/MP3][148.91MB]
- 刘雅丽.2001-丽花皇后·EMI精选王【EMI百代】【FLAC分轨】
- 齐秦.1994-黄金十年1981-1990CHINA.TOUR.LIVE精丫上华】【WAV+CUE】
- 群星.2008-本色·百代音乐人创作专辑【EMI百代】【WAV+CUE】
- 群星.2001-同步过冬AVCD【环球】【WAV+CUE】
- 群星.2020-同步过冬2020冀待晴空【环球】【WAV+CUE】
- 沈雁.1986-四季(2012梦田复刻版)【白云唱片】【WAV+CUE】
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[FLAC/分轨][257.88MB]
- 《国语老歌 怀旧篇 3CD》[WAV/分轨][1.6GB]