国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Python > 正文

python實現12306登錄并保存cookie的方法示例

2024-09-09 19:03:19
字體:
來源:轉載
供稿:網友

經過倒騰12306的登錄,還是實現了,請求頭很重要...各位感興趣的可以繼續寫下去.....

import sysimport timeimport requestsfrom PIL import Imageimport jsonimport osimport Headersimport SessionUtilimport 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()
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赞皇县| 新宁县| 宜丰县| 太仓市| 靖西县| 白朗县| 旌德县| 玉树县| 新田县| 霍城县| 随州市| 拉孜县| 鄂托克前旗| 阿合奇县| 象山县| 德惠市| 怀安县| 本溪| 灵武市| 六枝特区| 鸡东县| 西乌| 同江市| 通江县| 万山特区| 桦甸市| 金山区| 普陀区| 芜湖市| 德兴市| 兴安县| 凯里市| 万州区| 区。| 渑池县| 辉南县| 洞口县| 固安县| 伊金霍洛旗| 二手房| 巨野县|