哔哩哔哩获取cookie
打开浏览器开发者工具,哔哩哔切到 Network 面板,哔哩哔刷新任意一个 B 站页面,哔哩哔你会在请求头里看到一整串 先说最直接的哔哩哔办法:手动复制。登录 B 站后按 F12,哔哩哔在 Application 选项卡里找到 Cookies,哔哩哔域名选 手动复制适合一次性调试,写爬虫或做自动化就得用代码拿。Python 里 注意 还有一种场景:你已经有一份 cookie 字符串,想解析成字典。别用 这样能正确处理转义和编码。B 站的 拿到 cookie 后存哪儿也有讲究。硬编码在脚本里最省事,但泄露风险高。环境变量或单独的 最后提醒一句:Cookie。哔哩哔这里面藏着 SESSDATA、哔哩哔bili_jct、哔哩哔DedeUserID 这几个关键字段,哔哩哔它们决定了你是哔哩哔谁、能不能发弹幕、哔哩哔能不能投币。哔哩哔想用脚本自动化操作 B 站,哔哩哔拿到这串东西是哔哩哔第一步。bilibili.com,你会看到一张表。把 SESSDATA 的值复制出来,它大概长这样——一串 Base64 编码的字符,末尾通常带 %2C 或逗号。这个值就是你的身份令牌,有效期大约一个月。拿它去请求 api.bilibili.com/x/web-interface/nav,返回的 JSON 里 isLogin 为 true,说明 cookie 有效。requests 库配合 session 对象最省事。先构造登录请求,B 站登录接口需要处理极验验证码,纯代码绕过去比较麻烦。实际项目中更常见的做法是:用 selenium 或 playwright 驱动真实浏览器,让用户手动扫码登录,然后从 driver.get_cookies() 里提取。代码大概长这样:from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.bilibili.com") input("扫码登录后按回车...") cookies = driver.get_cookies() sessdata = [c['value'] for c in cookies if c['name'] == 'SESSDATA'][0] print(sessdata)get_cookies() 返回的是列表,每个元素是字典,包含 name、value、domain、path 等字段。直接拼成请求头时,格式是 name=value; name2=value2。有人图省事只取 SESSDATA,结果请求返回 -101 未登录。因为 bili_jct 是 CSRF 令牌,发 POST 请求时必须带上,否则会被拦截。我踩过这个坑,当时调投币接口一直报错,查了半天才发现少了个 bili_jct。split(';') 然后 strip() 硬拆,遇到值里带分号就崩。标准做法是用 http.cookies.SimpleCookie:from http.cookies import SimpleCookie raw = "SESSDATA=abc%2Cdef; bili_jct=xyz; DedeUserID=123" cookie = SimpleCookie() cookie.load(raw) sessdata = cookie['SESSDATA'].valueSESSDATA 里逗号被编码成 %2C,SimpleCookie 不会自动解码,需要再 urllib.parse.unquote 一次。这个细节很少有文章提,但实际用的时候不解码,请求照样失败。config.json 更稳妥。如果做多账号管理,建议用 SQLite 存,字段至少包括 uid、sessdata、bili_jct、expires。B 站 cookie 有效期不固定,SESSDATA 通常 30 天,bili_jct 跟着会话走。写个定时任务每天检查 nav 接口的返回码,失效了就重新扫码,比等到报错再处理省心。SESSDATA 等同于账号密码。别把它传到公开仓库,别在客户端代码里明文出现。我见过有人把 cookie 写进前端 JS,结果被人扒出来发弹幕骂人,账号直接封禁。技术本身没对错,用的时候多留个心眼。
-
上一篇
-
下一篇
- 随机阅读
- 搜索
-
- 友情链接
-