2025年3月22日 星期六 甲辰(龙)年 月廿一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

获取cookie源码,适合大部分网站

时间:04-26来源:作者:点击数:34

顾名思义就是获取cookie的

通过扫码登录的方式,通过LWPCookieJar模块,可以获取各大网站的cookie信息,并将其保存到指定的cookie文件中, 后续使用可以直接加载cookie文件,无需二次登录。

注意:切勿将保存的cookie文件随意泄露给他人,以免出现不可控因素。

  • from time import sleep
  • from http.cookiejar import LWPCookieJar
  • import requests
  • from re import findall
  • from tkinter import StringVar, Tk, messagebox
  • from os import path
  • from io import BytesIO
  • from PIL import Image, ImageTk
  • from qrcode import QRCode
  • from tkinter.ttk import Button, Label
  • from threading import Thread
  • temp_cookie = './cookie/bzcookies.txt'
  • headers = {
  • 'authority': 'api.vc.bilibili.com', 'accept': 'application/json, text/plain, */*',
  • 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', 'content-type': 'application/x-www-form-urlencoded',
  • 'origin': 'https://message.bilibili.com', 'referer': 'https://message.bilibili.com/',
  • 'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Microsoft Edge";v="116"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"',
  • 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-site',
  • 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.81',
  • }
  • def is_login(session):
  • try:
  • session.cookies.load(ignore_discard = True)
  • except Exception as e:
  • print(e)
  • login_url = session.get("https://api.bilibili.com/x/web-interface/nav", verify = False, headers = headers).json()
  • if login_url['code'] == 0:
  • print(f"Cookies值有效, {login_url['data']['uname']}, 已登录!")
  • # verification()
  • return True
  • else:
  • print('Cookies值已经失效,请重新扫码登录!')
  • # verification()
  • return False
  • def scan_code(session2):
  • global bili_jct
  • get_login = session2.get('https://passport.bilibili.com/x/passport-login/web/qrcode/generate?source=main-fe-header', headers = headers).json()
  • qrcode_key = get_login['data']['qrcode_key']
  • qr = QRCode()
  • qr.add_data(get_login['data']['url'])
  • img = qr.make_image()
  • pil_image_change = img.resize((200, 200), resample = Image.BICUBIC, box = None, reducing_gap = None)
  • code_pic = ImageTk.PhotoImage(pil_image_change)
  • token_url = f'https://passport.bilibili.com/x/passport-login/web/qrcode/poll?qrcode_key={qrcode_key}&source=main-fe-header'
  • label_ver1 = Label(root, image = code_pic)
  • v1.set('等待扫码')
  • label_ver1.grid(row = 1, column = 1, rowspan = 8, columnspan = 1, sticky = 'n')
  • while 1:
  • qrcode_data = session2.get(token_url, headers = headers).json()
  • if qrcode_data['data']['code'] == 0:
  • v1.set('扫码成功')
  • session2.get(qrcode_data['data']['url'], headers = headers)
  • break
  • else:
  • v1.set(qrcode_data['data']['message'])
  • sleep(1)
  • root.update()
  • session2.cookies.save()
  • with open(temp_cookie, 'r', encoding = 'utf-8') as f:
  • bzcookie = f.read()
  • bili_jct = findall(r'bili_jct=(.*?);', bzcookie)[0]
  • def bz_login():
  • global code_pic
  • session1.cookies = LWPCookieJar(filename = temp_cookie)
  • status = is_login(session1)
  • if not status:
  • scan_code(session1)
  • verification()
  • else:
  • verification()
  • def verification():
  • url = 'https://api.bilibili.com/x/web-interface/nav'
  • resp1 = session1.get(url = url, headers = headers).json()
  • global tk_image
  • if resp1['data']['isLogin']:
  • face_url = resp1['data']['face']
  • image_bytes = requests.get(face_url).content
  • data_stream = BytesIO(image_bytes)
  • pil_image = Image.open(data_stream)
  • pil_image_change = pil_image.resize((200, 200), resample = Image.BICUBIC, box = None, reducing_gap = None)
  • tk_image = ImageTk.PhotoImage(pil_image_change)
  • status = "cookie有效!登录成功!"
  • else:
  • thread_it(bz_login)
  • status = 'cookie无效!重新登录'
  • label_ver = Label(root, image = tk_image)
  • label_ver.grid(row = 1, column = 1, rowspan = 8, columnspan = 1, sticky = 'n')
  • v1.set(status)
  • def thread_it(func, *args):
  • thread = Thread(target = func, args = args, daemon = True)
  • thread.start()
  • def cancel_login():
  • msg1 = messagebox.askyesno(title = "提示", message = "注销后cookie将失效,是否注销登录?")
  • if msg1:
  • url3 = 'https://passport.bilibili.com/login/exit/v2'
  • data3 = {'biliCSRF': f'{bili_jct}'}
  • session1.post(url = url3, headers = headers, data = data3).json()
  • verification()
  • if __name__ == '__main__':
  • root = Tk()
  • v1 = StringVar()
  • if not path.exists(temp_cookie):
  • with open(temp_cookie, 'w', encoding = 'utf-8') as f:
  • f.write("")
  • with open(temp_cookie, 'r', encoding = 'utf-8') as f:
  • bzcookie = f.read()
  • try:
  • bili_jct = findall(r'bili_jct=(.*?);', bzcookie)[0]
  • except Exception as e:
  • print(e)
  • requests.packages.urllib3.disable_warnings()
  • session1 = requests.session()
  • root.geometry('300x225')
  • root.title("cookie")
  • thread_it(bz_login)
  • btn1 = Button(root, width=10, text='注销登录', command=cancel_login)
  • btn1.grid(row=3, column=2)
  • label_ver2 = Label(root, textvariable = v1)
  • label_ver2.grid(row = 9, column = 1, rowspan = 8, columnspan = 1, sticky = 'n')
  • root.mainloop()

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门