Python:实现b站登录并保存登录信息(baidu Comate插件帮助我逐行分析代码)

server/2025/2/14 8:18:26/

📚博客主页:knighthood2001
公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下)
🎃知识星球:【认知up吧|成长|副业】介绍
❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️
🙏笔者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 前言
  • 具体实现过程
    • 项目总览
    • 从代码运行流程入手
      • 登录函数
      • 判断是否登录
      • 登录二维码+保存cookie
      • 验证函数
      • 注销登录
  • 使用后的一些感悟
    • 好用的地方
    • 可以改进的地方
  • 结束语

前言

我在某个论坛中,看到一个很有实战意义的python 爬虫Demo。

代码如下:

python">import os.path
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
# TODO 这段代码只适用于bilibili
temp_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 Trueelse:print('Cookies值已经失效,请重新扫码登录!')# verification()return Falsedef scan_code(session2):global bili_jctget_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)breakelse: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_picsession1.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_imageif resp1['data']['isLogin']:face_url = resp1['data']['face']image_bytes = requests.get(face_url).contentdata_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):os.makedirs(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()  # 读取cookietry: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()

这段Python代码主要实现了Bilibili的自动登录功能,利用了Bilibili的登录机制,通过扫描二维码的方式获取登录信息,并保存登录信息以便后续使用。

我之前写代码,没有在Pycharm中安装过代码辅助助手,今天让我们一起试试Baidu Comate智能编码助手,帮我更好的理解这段代码吧。
在这里插入图片描述

具体实现过程

首先打开你的项目文件,然后Baidu Comate智能编码助手插件在右侧。

在这里插入图片描述

项目总览

对于大部分人来说,到手一个代码,肯定要先从宏观角度,先了解一下这段代码总体是在做什么的。

这能方便我们对这个项目有一个总览。

因此我们全选代码->右键->百度Comate代码工具->代码解释
在这里插入图片描述
如下图所示,代码助手首先会讲解一下,代码实现的功能,然后是具体代码的讲解。
在这里插入图片描述
这个代码,很多内容是关于爬虫的,很多知识和库我也不知道,让我们一起看看它的讲解。

  1. 导入必要的库:
    os.path:用于文件路径的操作。
    sleep:用于暂停线程的执行。
    LWPCookieJar:用于保存和加载cookie。
    requests:用于发送HTTP请求。
    re.findall:用于从字符串中查找符合正则表达式的所有内容。
    Tkinter:用于创建GUI界面。
    PIL:用于图像处理。
    qrcode:用于生成二维码。
    threading:用于多线程处理。

  2. 定义全局变量:
    temp_cookie:保存cookie的文件名。
    headers:HTTP请求头信息。

  3. 定义函数:
    is_login(session):检查当前session的cookies是否有效,如果有效则返回True,否则返回False。
    scan_code(session2):生成登录二维码并等待用户扫描,扫描成功后保存cookies。
    bz_login():主要的登录函数,先检查cookies是否有效,如果无效则调用scan_code函数进行登录。
    verification():验证登录状态,如果登录成功则显示用户头像,否则提示重新登录。
    thread_it(func, *args):创建一个新的线程来执行指定的函数。
    cancel_login():注销登录,并调用verification函数更新状态。

  4. 主程序:

    • 创建一个Tkinter的GUI窗口。
    • 检查temp_cookie文件是否存在,如果不存在则创建该文件。
    • 尝试从temp_cookie文件中读取cookies,并提取bili_jct值。
    • 创建一个requests的session对象。
    • 在一个新的线程中调用bz_login函数进行登录。
    • 创建注销登录的按钮,并绑定cancel_login函数。
    • 显示登录状态标签。
    • 进入Tkinter的主事件循环。

这里面,Baidu Comate智能编码助手会给出我导入这个库是做什么的,对于新手来说很友好。

此外,很多新手对于函数的具体作用,会搞不清楚,但是当baidu Comate插件给出每个函数具体实现的功能时,就好理解多了。

从代码运行流程入手

python">if __name__ == '__main__':root = Tk()v1 = StringVar()# 创建存储cookie的txt文件if not path.exists(temp_cookie):os.makedirs(temp_cookie)  # 创建文件with open(temp_cookie, 'w', encoding='utf-8') as f:f.write("")# 读取cookiewith open(temp_cookie, 'r', encoding='utf-8') as f:bzcookie = f.read()  # 读取cookietry: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()

这是代码运行流程。

在这里插入图片描述
首先,这两行代码创建了一个Tkinter窗口(root)和一个用于存储和跟踪字符串值的变量(v1)。之后,可以使用root来添加和管理窗口中的组件,并使用v1来在这些组件之间共享或传递字符串值。


python">    # 创建存储cookie的txt文件if not path.exists(temp_cookie):os.makedirs(temp_cookie)  # 创建文件with open(temp_cookie, 'w', encoding='utf-8') as f:f.write("")# 读取cookiewith open(temp_cookie, 'r', encoding='utf-8') as f:bzcookie = f.read()  # 读取cookie

这段代码我熟,它是用来创建一个空的存储cookie的txt文件,然后每次进行读取txt中的cookie


在这里插入图片描述
我自己其实写代码的习惯不好,不会写捕获异常,防止代码崩溃。这点我后续可以好好学习一下。

python">requests.packages.urllib3.disable_warnings()  # 隐藏一些警告

这一行代码,可以隐藏一些警告,使得打印台的打印内容好看些。不会爆红。

在这里插入图片描述


python">session1 = requests.session()

在这里插入图片描述
这个session1对象可以被用来发送HTTP请求,并且会自动处理cookies和连接问题。

一旦你有了这个session1对象,你就可以使用它来发送各种HTTP请求,如GET、POST等

这一块内容,我之前没有涉及到。

因此我继续追问

在这里插入图片描述
怪不得这个项目代码中有那么多session1

在这里插入图片描述


登录函数

接下来我们看bz_login函数,这个函数非常重要。

这个函数将所有函数串在一起了。

首先就是加载一下你保存的cookie,判断是否登录,如果登录,就去验证状态,如果没有登录,就显示二维码,提示扫码登录,然后去验证状态。

python"># 主要的登录函数,先检查cookies是否有效,如果无效则调用scan_code函数进行登录。
def bz_login():"""使用session1对象登录Bilibili,如果未登录则执行扫码登录和验证操作。Args:无Returns:无"""global code_picsession1.cookies = LWPCookieJar(filename=temp_cookie)  # 用于保存和加载cookies。status = is_login(session1)  # 判断是否已经登录if not status:  # 没有登录scan_code(session1)  # 执行扫码登录verification()  # 验证else:  # 验证verification()

接着就是由bz_login函数中调用的函数,依次往上去找。

判断是否登录

首先就是is_login函数,使用baidu Comate的行间注释,可以得到下面每行的讲解。

python"># 检查当前session的cookies是否有效,如果有效则返回True,否则返回False。
def is_login(session):"""判断是否已经登录Args:session: requests.Session对象,用于发送HTTP请求Returns:bool: 如果已经登录则返回True,否则返回False"""try:# 尝试加载cookies,忽略丢弃的cookiessession.cookies.load(ignore_discard=True)except Exception as e:# 如果加载失败,则打印异常信息print(e)# 发送HTTP请求获取登录状态信息login_url = session.get("https://api.bilibili.com/x/web-interface/nav", verify=False, headers=headers).json()# 判断登录状态if login_url['code'] == 0:# 如果登录状态码为0,则表示登录成功print(f"Cookies值有效, {login_url['data']['uname']}, 已登录!")return Trueelse:# 如果登录状态码不为0,则表示登录失败print('Cookies值已经失效,请重新扫码登录!')return False
python">login_url = session.get("https://api.bilibili.com/x/web-interface/nav", verify=False, headers=headers).json()

在这里插入图片描述

实际操作过程中:我们进行扫码登录的时候,其会去对这个API调用请求

(https://api.bilibili.com/x/web-interface/nav)

在这里插入图片描述

在这里插入图片描述
可以看到login_url['data']['uname']就是你的用户名。

因此,你应该能懂这里的代码了吧。


登录二维码+保存cookie

接着,我们回到bz_login函数,继续往下看。这回就是没有登录的时候,进入scan_code函数。

首先,我们打开登录按钮,然后找到我标红的内容。

https://passport.bilibili.com/x/passport-login/web/qrcode/generate?source=main-fe-header
在这里插入图片描述

可以发现qrcode_key: “3827b5a4371498d0f7b5d7250030ce67”,这个就是我们下面这个登录需要的一个参数。

在这里插入图片描述

这个轮询二维码的意思,就是比如它每隔一段时间,就会在此发送这个请求。

因此这个函数的代码就比较好理解了。

python">    # 发送请求获取登录二维码信息get_login = session2.get('https://passport.bilibili.com/x/passport-login/web/qrcode/generate?source=main-fe-header',headers=headers).json()# 获取二维码的keyqrcode_key = get_login['data']['qrcode_key']

这个就是去获取我刚刚说的qrcode_key: “3827b5a4371498d0f7b5d7250030ce67”。

python"># 创建二维码对象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)# 将图片转换为Tkinter可以显示的格式code_pic = ImageTk.PhotoImage(pil_image_change)

这段代码就是将网页的二维码,重新通过qrcode的方式生成,方便你扫码登录。


下图是未登录的状态
在这里插入图片描述
下图是登录的状态,因此你有很多方式去判断是否登录。
在这里插入图片描述

python">    while 1:# 轮询二维码状态qrcode_data = session2.get(token_url, headers=headers).json()# 判断二维码状态if qrcode_data['data']['code'] == 0:# 扫码成功v1.set('扫码成功')# 使用session2获取登录成功后的页面信息session2.get(qrcode_data['data']['url'], headers=headers)breakelse:# 更新状态信息v1.set(qrcode_data['data']['message'])sleep(1)root.update()# 保存会话的cookiesession2.cookies.save()

这段代码讲的就是我说的那个意思。

首先进入死循环,一直显示这个二维码,判断是否登录,并使用session2获取登录成功后的页面信息,方便后续将cookie进行保存。否则更新对应的状态。

python">    # 读取临时保存的cookiewith open(temp_cookie, 'r', encoding='utf-8') as f:bzcookie = f.read()# 从cookie中提取bili_jct的值bili_jct = findall(r'bili_jct=(.*?);', bzcookie)[0]

这段代码就是用来提取一个重要的参数。
在这里插入图片描述


验证函数

最后,来到了verification函数,也就是验证函数。

经过逐行解释的代码如下:

python"># 验证登录状态,如果登录成功则显示用户头像,否则提示重新登录。
def verification():# 定义URL地址url = 'https://api.bilibili.com/x/web-interface/nav'# 发送GET请求并解析返回的JSON数据resp1 = session1.get(url=url, headers=headers).json()# 声明全局变量tk_imageglobal tk_image# 判断返回的JSON数据中是否已登录if resp1['data']['isLogin']:# 获取用户头像的URL地址face_url = resp1['data']['face']# 发送GET请求获取头像图片的内容image_bytes = requests.get(face_url).content# 将字节流转换为BytesIO对象data_stream = BytesIO(image_bytes)# 打开图片并转换为PIL Image对象pil_image = Image.open(data_stream)# 调整图片大小为200x200,使用双三次插值算法进行缩放pil_image_change = pil_image.resize((200, 200), resample=Image.BICUBIC, box=None, reducing_gap=None)# 将PIL Image对象转换为Tkinter可以显示的PhotoImage对象tk_image = ImageTk.PhotoImage(pil_image_change)# 设置状态信息为登录成功status = "cookie有效!登录成功!"else:# 如果未登录,则调用线程执行登录函数thread_it(bz_login)# 设置状态信息为重新登录status = 'cookie无效!重新登录'# 创建一个标签,并设置其显示的图片为tk_imagelabel_ver = Label(root, image=tk_image)# 将标签放置在指定的网格位置label_ver.grid(row=1, column=1, rowspan=8, columnspan=1, sticky='n')# 设置状态变量的值为statusv1.set(status)

首先就是你登陆后,会去请求这个网站,里面会有很多返回内容

https://api.bilibili.com/x/web-interface/nav

在这里插入图片描述
你需要的内容就可以通过json读取。包括是否登录,头像的网址等等等等。


注销登录

最后就是注销登录了。

在这里插入图片描述
这里大家可以自行去网站尝试一下,寻找一下注销的接口,返回的内容。


最后,这个项目大致上就讲完了。

这是经过Baidu Comate智能编码助手渲染过的代码哟。更适合非项目作者去了解这个项目。

python">import os.path
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
# TODO 这段代码只适用于bilibili
temp_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',
}# 检查当前session的cookies是否有效,如果有效则返回True,否则返回False。
def is_login(session):"""判断是否已经登录Args:session: requests.Session对象,用于发送HTTP请求Returns:bool: 如果已经登录则返回True,否则返回False"""try:# 尝试加载cookies,忽略丢弃的cookiessession.cookies.load(ignore_discard=True)except Exception as e:# 如果加载失败,则打印异常信息print(e)# 发送HTTP请求获取登录状态信息login_url = session.get("https://api.bilibili.com/x/web-interface/nav", verify=False, headers=headers).json()# 判断登录状态if login_url['code'] == 0:# 如果登录状态码为0,则表示登录成功print(f"Cookies值有效, {login_url['data']['uname']}, 已登录!")return Trueelse:# 如果登录状态码不为0,则表示登录失败print('Cookies值已经失效,请重新扫码登录!')return False# 生成登录二维码并等待用户扫描,扫描成功后保存cookies。
def scan_code(session2):"""生成登录二维码并轮询其状态,若二维码被扫描并验证通过,则保存会话的cookie并提取bili_jct的值。Args:session2 (requests.Session): 会话对象,用于发送HTTP请求。Returns:None: 此函数无返回值,直接操作全局变量bili_jct。"""# 获取登录二维码global bili_jct# 发送请求获取登录二维码信息get_login = session2.get('https://passport.bilibili.com/x/passport-login/web/qrcode/generate?source=main-fe-header',headers=headers).json()# 获取二维码的keyqrcode_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)# 将图片转换为Tkinter可以显示的格式code_pic = ImageTk.PhotoImage(pil_image_change)# 生成轮询二维码状态的URLtoken_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获取登录成功后的页面信息session2.get(qrcode_data['data']['url'], headers=headers)breakelse:# 更新状态信息v1.set(qrcode_data['data']['message'])sleep(1)root.update()# 保存会话的cookiesession2.cookies.save(filename=temp_cookie)# 读取临时保存的cookiewith open(temp_cookie, 'r', encoding='utf-8') as f:bzcookie = f.read()# 从cookie中提取bili_jct的值bili_jct = findall(r'bili_jct=(.*?);', bzcookie)[0]# 主要的登录函数,先检查cookies是否有效,如果无效则调用scan_code函数进行登录。
def bz_login():"""使用session1对象登录Bilibili,如果未登录则执行扫码登录和验证操作。Args:无Returns:无"""global code_picsession1.cookies = LWPCookieJar(filename=temp_cookie)  # 用于保存和加载cookies。status = is_login(session1)  # 判断是否已经登录if not status:  # 没有登录scan_code(session1)  # 执行扫码登录verification()  # 验证else:  # 验证verification()# 验证登录状态,如果登录成功则显示用户头像,否则提示重新登录。
def verification():# 定义URL地址url = 'https://api.bilibili.com/x/web-interface/nav'# 发送GET请求并解析返回的JSON数据resp1 = session1.get(url=url, headers=headers).json()# 声明全局变量tk_imageglobal tk_image# 判断返回的JSON数据中是否已登录if resp1['data']['isLogin']:# 获取用户头像的URL地址face_url = resp1['data']['face']# 发送GET请求获取头像图片的内容image_bytes = requests.get(face_url).content# 将字节流转换为BytesIO对象data_stream = BytesIO(image_bytes)# 打开图片并转换为PIL Image对象pil_image = Image.open(data_stream)# 调整图片大小为200x200,使用双三次插值算法进行缩放pil_image_change = pil_image.resize((200, 200), resample=Image.BICUBIC, box=None, reducing_gap=None)# 将PIL Image对象转换为Tkinter可以显示的PhotoImage对象tk_image = ImageTk.PhotoImage(pil_image_change)# 设置状态信息为登录成功status = "cookie有效!登录成功!"else:# 如果未登录,则调用线程执行登录函数thread_it(bz_login)# 设置状态信息为重新登录status = 'cookie无效!重新登录'# 创建一个标签,并设置其显示的图片为tk_imagelabel_ver = Label(root, image=tk_image)# 将标签放置在指定的网格位置label_ver.grid(row=1, column=1, rowspan=8, columnspan=1, sticky='n')# 设置状态变量的值为statusv1.set(status)# 创建一个新的线程来执行指定的函数。
def thread_it(func, *args):thread = Thread(target=func, args=args, daemon=True)thread.start()# 注销登录,并调用verification函数更新状态。
def cancel_login():# 弹出提示框询问用户是否注销登录msg1 = messagebox.askyesno(title="提示", message="注销后cookie将失效,是否注销登录?")if msg1:# 如果用户选择注销登录# 定义注销登录的URL地址url3 = 'https://passport.bilibili.com/login/exit/v2'# 构建注销登录的请求数据data3 = {'biliCSRF': f'{bili_jct}'}# 发送POST请求进行注销登录操作,并获取返回的JSON数据session1.post(url=url3, headers=headers, data=data3).json()# 调用verification函数进行登录状态验证verification()
if __name__ == '__main__':root = Tk()v1 = StringVar()# 创建存储cookie的txt文件if not path.exists(temp_cookie):os.makedirs(temp_cookie)  # 创建文件with open(temp_cookie, 'w', encoding='utf-8') as f:f.write("")# 读取cookiewith open(temp_cookie, 'r', encoding='utf-8') as f:bzcookie = f.read()  # 读取cookietry: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()

我使用Baidu Comate智能编码助手生成了一个流程图。
在这里插入图片描述
这个流程图还是很清楚的讲述了这个项目做的事情的。

使用后的一些感悟

好用的地方

在这里插入图片描述
它可以帮助你写函数的注释,也就是下面这个。

python">    """使用session1对象登录Bilibili,如果未登录则执行扫码登录和验证操作。Args:无Returns:无"""

一般好的项目,方便你理解,或多或少都会有英文写的这个。因此这一个功能简直太酷了,你几乎不需要费力,就能自动帮你生成。


点击行间注释,它会每一行给你解释这一行在做什么。

在这里插入图片描述
这一点也很棒,有了这个,你可以一行一行看。

要是能够将这个结果和项目中对应的这个片段进行一键替换,那就更好了。

因此你可以这样操作:

百度Comate助手


在这里插入图片描述
你也可以生成单元测试,目前对我来说,暂时还用不到,但是有总比没有强。以后或许能用到。

可以改进的地方

  1. 建议官方可以添加一个复制一个问题答案的全部内容的按钮,否则需要用鼠标选中全部内容,然后复制,但是会没有相应markdown格式。
    在这里插入图片描述
  2. 希望官方能够添加一个换行的快捷键,比如shift+Enter,不然有时候看着不太舒服。(即使它知道要在哪里进行换行)
    在这里插入图片描述

结束语

作为第一次在pycharm中安装代码助手,Baidu Comate智能编码助手总体体验下来,还是很不错的,尤其是能够帮助你逐行解释,然后给你生成函数注释,懒人福音。

👉Baidu Comate体验地址:https://comate.baidu.com/zh

快来使用吧,提高写代码的效率。


http://www.ppmy.cn/server/36663.html

相关文章

PWN入门--栈溢出

PWN入门–栈溢出 栈概要 介于网上各种wp在栈溢出利用脚本方面浅入浅出,深入讲一下栈溢出利用时,地址如何计算,栈中垃圾数据如何填充,函数调用时 参数 在栈中的分布, 栈帧的生成,函数返回值ip在栈中的摆放…

什么是SSL?SSL安全证书一定要有吗?

什么是SSL证书? SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发&…

Internet接入技术

internet接入技术 发展 1960s-1980s 早期互联网雏形ARPANET发展,主要限于研究机构和大学之间,通过专用线路连接。 1990s初期 拨号接入开始普及,用户通过电话线和调制解调器以低速(起初为14.4Kbps,后来提升到56Kbps&a…

java一个接口完成三种文件类型上传(exe,文档,图片)

try {// 获取文件后缀名String originalFilename file.getOriginalFilename();String fileExtension originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();// 判断文件类型并设置对应的字段和保存路径String filePath;String fieldType;…

Xshell不能使用(版权原因不能使用),通过ip连接虚拟机CentOS7系统拷贝文件

一、使用SSH服务 1.确保 CentOS 7 虚拟机安装了 SSH 服务。 systemctl status sshd 如果没有安装,您可以使用以下命令来安装: sudo yum install openssh-server 2.启动 SSH 服务(如果尚未启动): sudo systemctl …

[Rust] 打印变量类型

一、简介 本文介绍了如何在Rust中打印变量的类型。 二、代码 代码&#xff1a; // 使用 print_type_of 函数打印变量类型 fn print_type_of<T>(_: &T) {println!("{}", std::any::type_name::<T>()) }fn main() {let s "Hello";let i…

【一看就懂】UART、IIC、SPI、CAN四种通讯协议对比介绍

UART、IIC、SPI、CAN四种通信协议对比 通信方式传输线通讯方式标准传输速度使用场景UARTTX(发送数据线)、RX(接收数据线)串行、异步、全双工115.2 kbit/s(常用)计算机和外部设备通信&#xff08;打印机&#xff09;IICSCL(时钟线)、SDA(数据线)串行、同步、半双工100 kbit/s(标…

10页面结构分析

我们打开一个网页&#xff0c;都会有一个清晰的结构和布局上图中的标签就是用来划分各个部分区域用的。其中比较常用重要的是header、footer和nav&#xff0c;需要重点掌握。 下面是部分代码及效果演示 <header> <h2>网页头部</h2> </header><sec…