能否整合自动获取cooikes的脚本以解决cookies失效问题?
B站的cookies最近总是失效,我写了一个自动获取cookies的python程序,使用方法很简单,传递参数-R时,将打开www.bilibili.com供用户登录账号;当直接运行时,将打开https://api.bilibili.com/x/web-interface/nav/stat并监视网络活动,将cookies复制到剪贴板。 请问大佬,您能否将这个功能集成进您的拓展里,或使用类似思路(例如在potplayer-拓展-账户设置中提供打开网页登陆的选项)实现自动抓取cookies并每次打开potplayer时更新配置文件? 代码如下: python
import sys
import os
from PyQt5.QtCore import QUrl, QTimer
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QApplication, QMainWindow
import pyperclip
import argparse
# 设置环境变量来避免警告
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
os.environ["QT_SCREEN_SCALE_FACTORS"] = "1"
os.environ["QT_SCALE_FACTOR"] = "1"
# 需要提取的Cookie参数,按指定顺序排列
REQUIRED_COOKIES = [
"buvid3", "b_nut", "_uuid", "enable_web_push", "DedeUserID",
"DedeUserID__ckMd5", "header_theme_version", "CURRENT_BLACKGAP", "buvid4",
"rpdid", "buvid_fp_plain", "CURRENT_QUALITY", "SESSDATA", "bili_jct",
"bili_ticket", "bili_ticket_expires", "hit-dyn-v2", "fingerprint",
"buvid_fp", "bp_t_offset_22359752", "CURRENT_FNVAL", "home_feed_column",
"browser_resolution", "sid", "b_lsid"
]
class Browser(QMainWindow):
def __init__(self, url, close_delay=3000):
super().__init__()
self.browser = QWebEngineView()
self.setCentralWidget(self.browser)
self.browser.setUrl(QUrl(url))
self.show()
# 监听网络请求完成事件
self.browser.page().profile().cookieStore().cookieAdded.connect(self.onCookieAdded)
self.cookies_dict = {}
# 设置关闭时间和刷新时间
QTimer.singleShot(1000, self.refreshPage)
QTimer.singleShot(close_delay, self.closeBrowser)
def onCookieAdded(self, cookie):
# 当新的Cookie被添加时,提取它们并过滤,筛除重复参数
cookie_str = cookie.toRawForm().data().decode('utf-8')
for c in REQUIRED_COOKIES:
if cookie_str.startswith(c + "="):
self.cookies_dict[c] = cookie_str
break
def refreshPage(self):
self.browser.reload()
def closeBrowser(self):
self.close()
def getFormattedCookies(self):
# 按照指定顺序格式化Cookies
sorted_cookies = [self.cookies_dict[c] for c in REQUIRED_COOKIES if c in self.cookies_dict]
cookie_str = "; ".join(sorted_cookies)
formatted_cookie = f'"cookie": "{cookie_str}"'
return formatted_cookie
def closeEvent(self, event):
# 在窗口关闭时输出Cookies到终端和剪贴板
formatted_cookies = self.getFormattedCookies()
print(formatted_cookies)
pyperclip.copy(formatted_cookies)
print("Cookies已复制到剪贴板")
super().closeEvent(event)
def monitor_nav_stat():
# 打开指定API的URL并监视Cookie
app = QApplication(sys.argv)
window = Browser("https://api.bilibili.com/x/web-interface/nav/stat")
app.exec_()
def login_and_save_cookies():
# 打开Bilibili主页并让用户登录
app = QApplication(sys.argv)
window = Browser("https://www.bilibili.com", close_delay=30000) # 延长关闭时间以便用户登录
app.exec_()
def main():
parser = argparse.ArgumentParser(description="内嵌浏览器并监视网络活动")
parser.add_argument('-R', action='store_true', help="打开www.bilibili.com供用户登录")
args = parser.parse_args()
if args.R:
login_and_save_cookies()
else:
monitor_nav_stat()
if __name__ == "__main__":
main()
使用无痕模式登录,获取cookie后手动删除cookie #62
感谢您的回复,我之前在浏览器获取cookies时没有开启无痕模式,或许这是cookies失效快的原因,现在按您的指导做后,从您回复当天至目前,cookies仍然有效。
发件人: La02 @.> 发送时间: 2024年8月14日 12:15 收件人: chen310/BilibiliPotPlayer @.> 抄送: LoveElysia1314 @.>; Author @.> 主题: Re: [chen310/BilibiliPotPlayer] 能否整合自动获取cooikes的脚本以解决cookies失效问题? (Issue #112)
使用无痕模式登录,获取cookie后手动删除cookie #62https://github.com/chen310/BilibiliPotPlayer/issues/62
― Reply to this email directly, view it on GitHubhttps://github.com/chen310/BilibiliPotPlayer/issues/112#issuecomment-2287819312, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BEGG7XYYJ52JGVQQHEGBRDLZRLKUPAVCNFSM6AAAAABMOF7EROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEOBXHAYTSMZRGI. You are receiving this because you authored the thread.Message ID: @.***>
早看到你这个,我都不写了 插个我凑合改的 get_bilibili_cookie