如何自动获取Dev Tools中的Notion token_v2与notion_user_id?
解决react-notion-x令牌自动更新问题
方法一:用无头浏览器定期抓取有效Cookie
可以用Puppeteer这类无头浏览器工具,自动完成Notion登录并提取所需Cookie,替代手动复制的流程:
- 编写Node.js脚本,启动无头浏览器访问Notion登录页面
- 自动填入账号密码完成登录(若开启2FA,需额外处理验证码逻辑,比如手动介入一次后保存会话文件复用登录状态)
- 登录成功后,从浏览器Cookie中提取
TOKEN_V2和ACTIVE_USER对应的值 - 将提取到的值写入项目的环境变量文件(如
.env)或配置数据库 - 配置定时任务(如Linux的cron),定期执行脚本更新令牌;同时让服务监听配置文件变化,自动重载配置(比如用
dotenv-flow配合nodemon实现热重载)
示例核心代码片段:
const puppeteer = require('puppeteer'); const fs = require('fs'); async function fetchNotionCookies() { const browser = await puppeteer.launch({ headless: 'new', userDataDir: './notion-session' // 持久化登录状态,避免重复输入账号密码 }); const page = await browser.newPage(); await page.goto('https://www.notion.so'); // 检查是否已登录,未登录则执行登录流程 const isLoggedIn = await page.$('.notion-user-menu') !== null; if (!isLoggedIn) { await page.goto('https://www.notion.so/login'); await page.type('#email', process.env.NOTION_EMAIL); await page.type('#password', process.env.NOTION_PASSWORD); await page.click('[type="submit"]'); await page.waitForNavigation(); } // 获取目标Cookie const cookies = await page.cookies(); const tokenV2 = cookies.find(c => c.name === 'token_v2')?.value; const activeUser = cookies.find(c => c.name === 'ACTIVE_USER')?.value; // 更新环境变量文件 const envContent = `NOTION_TOKEN_V2=${tokenV2}\nNOTION_ACTIVE_USER=${activeUser}`; fs.writeFileSync('.env', envContent); await browser.close(); } fetchNotionCookies();
方法二:服务端会话自动刷新
如果你的服务是Node.js编写的,可以维护一个持久化会话,当令牌失效时自动重新登录获取新令牌:
- 使用
axios配合tough-cookie库管理Cookie会话 - 每次请求Notion API前,先发送一个轻量测试请求验证令牌有效性
- 若返回401或权限错误,立即执行登录流程获取新的
TOKEN_V2和ACTIVE_USER,更新会话Cookie - 将新令牌存入内存或配置文件,后续请求自动使用新令牌
重要提醒
- Notion的私有API并未公开,此类自动化操作可能违反Notion的服务条款,使用前请评估风险
- 账号密码、令牌等敏感信息务必加密存储,绝对不能硬编码在代码中
- 若开启2FA,自动化登录会更复杂,优先考虑用无头浏览器的会话文件持久化登录状态
内容的提问来源于stack exchange,提问作者thisNeil
相关产品推荐
相关产品推荐

