新闻详情

新闻详情

首页 / 资讯中心 / 详情

Expect的Cookie注入魔法揭秘:如何让你的测试模拟真实登录用户

发布时间:2026/9/26 13:48:34来源:尧图网络
Expect的Cookie注入魔法揭秘:如何让你的测试模拟真实登录用户
Expect的Cookie注入魔法揭秘如何让你的测试模拟真实登录用户【免费下载链接】expectExpect tests your agents code in a real browser项目地址: https://gitcode.com/gh_mirrors/expect6/expect如果你用 AI 编程助手写过网页代码一定遇到过这种尴尬自动化测试一打开页面就被踢回登录页。Expect 的Cookie 注入功能正是为解决这个难题而生——它能把你在本地浏览器里真实登录的会话直接「搬运」到浏览器自动化测试的浏览器中让你的测试像真实登录用户一样访问受保护的页面。为什么浏览器测试很难测「登录态」页面无头浏览器headless browser每次启动都是一个「白纸」环境没有登录过、没有会话、没有身份。所以访问需要鉴权的路由 → 被重定向到登录页调用受保护的 API → 收到 401 Unauthorized测试后台管理界面 → 根本进不去手动在测试脚本里写一遍「填账号、输密码、点登录」既脆弱又慢而且很多网站有验证码、二次验证自动登录根本不现实。Expect 的思路很巧妙别再登录了直接复用你本地浏览器里已经登录好的会话。魔法全貌三步完成 Cookie 注入整条链路可以概括为三步源码分布在三个核心模块步骤做什么所在模块1️⃣ 选浏览器在终端勾选要从哪些浏览器同步 Cookiecookie-sync-confirm-screen.tsx2️⃣ 提取 Cookie从本地浏览器的 Cookie 库中读取并解密packages/cookies/3️⃣ 注入测试浏览器在导航前把 Cookie 塞进 Playwright 上下文browser.ts下面逐一拆解。第一步命令行里勾选浏览器10 秒配置当你带着 URL 启动 Expect 测试时终端会弹出一个 Cookie 同步确认界面列出本机安装的所有浏览器Chrome、Edge、Brave、Firefox、Safari 等 18 种默认浏览器自动预选直接回车就能用支持多选空格勾选/取消、a全选、n全不选状态栏会实时显示cookies (2)之类的提示让你知道同步已开启你的选择会保存到项目偏好中下次运行自动沿用如果不想同步加--no-cookies参数即可完全跳过详见 index.tsx 的选项定义。第二步从本地浏览器「搬」出 Cookie 的两种策略这一步由独立的 packages/cookies 包完成它内置了两套互补的提取策略策略 A直接读磁盘上的 SQLite 数据库快速每个浏览器都把 Cookie 存在本地数据库文件里。Expect 的定位很准定位数据库按平台找到各浏览器的 Cookie 存储路径复制到临时目录避免和你正在使用的浏览器产生锁冲突解密仅 Chromium 系需要macOS从钥匙串取密钥 → PBKDF2-SHA1 → AES-128-CBCLinuxsecret-tool取密钥回退为固定口令WindowsLocal State中的密钥 → DPAPI 解包 → AES-256-GCM解析Chromium 查cookies表、Firefox 的 Cookie 是明文存储在cookies.sqlite、Safari 则解析二进制的Cookies.binarycookies文件各浏览器的具体解析逻辑分别在 chromium.ts、firefox.ts、safari.ts 中实现。策略 B用 CDP 让浏览器自己解密更省事对 Chromium 系浏览器还可以启动一个无头实例、通过 Chrome DevTools Protocol 发送Network.getAllCookies命令——解密工作交给浏览器自己完成完全绕开系统钥匙串弹窗。这个流程由 cdp-client.ts 驱动复制配置 → 移除单实例锁 → 无头启动 → WebSocket 取 Cookie → 清理退出全程不会碰你正在使用的真实配置。两种方式最终都归一化为统一的Cookie结构name、value、domain、path、httpOnly、sameSite…再按名称|域名|路径去重。第三步一行 addCookies测试浏览器「原地登录」提取到的 Cookie 会在打开目标页之前注入 Playwright 浏览器上下文核心只有三行逻辑见 browser.tsconst cookies Array.isArray(options.cookies) ? options.cookies : await extractDefaultBrowserCookies(url, preferredProfile); await context.addCookies(cookies.map((c) c.playwrightFormat));注入后测试浏览器访问任何需要登录的页面都会直接以「已登录」身份进入。为了让 Agent 调用浏览器时不必等待提取MCP 会话在启动时就在后台预提取Cookie见 mcp-session.ts——等页面要打开时Cookie 早已就位。真实效果官方测试验证的 4 个细节Expect 用一套完整的模拟应用验证了注入后的行为见 cookie-injection.test.ts这些细节正是「像真实用户」的关键✅HttpOnly 会话 Cookie 自动隐藏document.cookie里看不到sid与真实浏览器安全行为一致✅路径作用域精确生效admin_panel只在/admin路由被发送公开页面不会带上✅页面内 fetch 自动携带 Cookie测试里的前端 JS 调 API 直接返回已认证数据✅会话可跨浏览器迁移从浏览器 A 提取的 Cookie 注入全新浏览器 BB 立刻具备登录态而没注入的浏览器访问同一页面仍被重定向到登录页正因为登录态开箱即用Agent 才能专注于真正的测试像图中所示它会自动生成「填充邮箱 → 填充密码 → 提交表单 → 验证跳转」这样的测试计划直接跑在真实的登录/受保护页面上。新手快速上手# 1. 全局安装 Expect CLI npm install -g expect-cli # 2. 在项目里运行会提示你选择同步 Cookie 的浏览器 expect -m 测试登录后的仪表板功能 -u http://localhost:3000几个实用小贴士CI 环境用--ci模式会自动跳过 Cookie 提取服务器上本来也没有你的本地浏览器无头运行 30 分钟超时隐私Cookie 只在你的机器上读取和注入整个流程本地完成临时关闭--no-cookies一键回到「匿名访客」模式方便专门测试未登录路径总结Expect 的 Cookie 注入把浏览器测试中最头疼的「登录态」问题化成了 10 秒钟的选择勾选浏览器 → 自动提取解密 → 注入测试浏览器。从此你的 AI 编程助手测试代码时就是那个已经登录好、有完整会话的「真实用户」——受保护页面、后台管理、个性化 API全都测得动 【免费下载链接】expectExpect tests your agents code in a real browser项目地址: https://gitcode.com/gh_mirrors/expect6/expect创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Ubuntu 24.04安装Docker实战指南:适配cgroup v2与Secure Boot 2026/9/26 14:32:38

Ubuntu 24.04安装Docker实战指南:适配cgroup v2与Secure Boot

1. 为什么在Ubuntu 24.04上装Docker不是“点几下就完事”的事? 刚升级到Ubuntu 24.04 LTS(Noble Numbat)的朋友,可能已经发现:官方文档里那套 apt install docker.io 的命令,跑出来的东西连 docker --ve…

阅读更多 →
Video2X视频超分辨率实战指南:AI如何重写像素基因 2026/9/26 14:32:38

Video2X视频超分辨率实战指南:AI如何重写像素基因

1. 这不是“一键美颜”,而是用AI重写视频的像素基因 你有没有遇到过这样的情况:翻出十年前拍的家庭录像,想投到新买的4K电视上,结果画面糊得像隔着一层毛玻璃;或者下载了一部老电影的蓝光资源,分辨率标着10…

阅读更多 →
Video2X视频超分辨率实战指南:AI重建像素细节 2026/9/26 14:32:38

Video2X视频超分辨率实战指南:AI重建像素细节

1. 这不是“一键美颜”,而是用AI重写视频的像素基因你有没有遇到过这样的场景:翻出五年前拍的家庭旅行录像,想投到新买的4K电视上重温,结果一播放——人物边缘发虚、车牌号糊成一片马赛克、连孩子脸上的雀斑都看不清;或…

阅读更多 →
LayerNorm原理与工程实践:从数学本质到部署避坑 2026/9/26 14:32:38

LayerNorm原理与工程实践:从数学本质到部署避坑

1. 为什么LayerNorm不是“把数据变小”,而是让模型学得更稳?LayerNorm(层归一化)这个词,刚接触深度学习的人常误以为它和BatchNorm一样,是“标准化输入数据”的操作——比如把一张图缩放到0~1之间&#xff…

阅读更多 →
手把手本地部署 OpenClaw(安全篇):用 TaoToken 统一 Key 加固 Docker 与 Node.js 配置 2026/9/26 14:32:38

手把手本地部署 OpenClaw(安全篇):用 TaoToken 统一 Key 加固 Docker 与 Node.js 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
对话即开发:基于MCP协议的智能接口平台ApiGo实战 2026/9/26 14:32:31

对话即开发:基于MCP协议的智能接口平台ApiGo实战

1. 从“写代码”到“说话”的转变第一次听到“对话即是开发”这个说法,我脑子里蹦出来的画面是产品经理对着屏幕敲几行字,后端接口就自动生成了。说实话,做了这么多年接口开发,从最早手写 Servlet 到后来用 Swagger 注解&#xff…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉