OpenAI Codex vs Anthropic Claude — 2026-06-03
源码位置:~/daily/codex-chrome-ext/ · ~/daily/codex-chrome-bridge/ · ~/daily/claude-chrome-ext/
| 维度 | OpenAI Codex | Anthropic Claude |
|---|---|---|
| 扩展数量 | 2 个(Codex 主扩展 + Chrome Bridge) | 1 个 |
| 通信架构 | Native Messaging + 本地 HTTP 轮询 (127.0.0.1:17171) | Native Messaging + 云端 WebSocket (wss://bridge.claudeusercontent.com) |
| 远程控制 | 不支持(必须同机) | 支持(云端 relay,SSH 远程服务器可控制本地浏览器) |
| 页面理解 | 模糊元素匹配(text / aria-label / label / CSS selector) | Accessibility Tree(结构化文本 + ref_id 映射) |
| 截图 | chrome.tabs.captureVisibleTab | CDP Page.captureScreenshot + 智能缩放(pxPerToken=28, maxTarget=1568) |
| 可信点击 | CDP Input.dispatchMouseEvent(isTrusted=true) | CDP Input.dispatchMouseEvent(isTrusted=true) |
| 文字输入 | 注入脚本设置 value + dispatch input/change 事件 | CDP Input.insertText |
| UI 反馈 | 贝塞尔路径动画光标 + Favicon 徽章 + 弹簧物理引擎 | 橙色光标 + 边框发光脉冲 + Stop 按钮 + 静态指示条 |
| Side Panel | 无(依赖 Codex 桌面 App) | 内置完整 React 对话 UI |
| GIF 录制 | 无 | 内置(offscreen document + gif.js) |
| Tab 管理 | Work Window 概念(pin 一个窗口) | Tab Group 概念(chrome.tabGroups API) |
| SW 保活 | chrome.alarms(每 30s) | Offscreen Document keepalive(每 20s) |
| 定时任务 | 无 | chrome.alarms 定时执行预设 prompt |
ID: hehggadaopoacecdllhhajmbjkdcmajg
路径规划:生成多条贝塞尔候选曲线,通过评分函数选最优路径:
弹簧物理:所有动画属性(位置、旋转、缩放、透明度)用临界阻尼弹簧驱动:
"思考"动画:光标到达后做正弦波摇摆(振幅 12.5°,频率约 0.88Hz)
Favicon 徽章:动态生成 SVG 叠加到页面 favicon 上,三种状态:active(光标叠加)、deliverable(绿点)、handoff(黄点)
主扩展通过 nativeMessaging 与 Codex 桌面 App 直连,仅做光标动画同步:
ID: bpdlgcaopbfacedplnkopcilkmodnmcc
| 命令 | 实现 | 说明 |
|---|---|---|
| click | CDP + 注入 | 先注入找元素坐标 → CDP dispatchMouseEvent 可信点击 → fallback 注入 click() |
| doubleClick | CDP | clickCount=2 |
| traceClick | CDP | 点击 + 同时录制 Network/Console/Exception/Dialog |
| type | 注入脚本 | setNativeValue + dispatchEvent(input/change),支持 contentEditable |
| pressKey | 注入脚本 | KeyboardEvent keydown/keyup,支持修饰键 |
| selectOption | 注入脚本 | 操作 <select>,按 value/label/index 匹配 |
| setChecked | 注入脚本 | 设置 checkbox/radio 的 checked 属性 |
| scroll / scrollIntoView | 注入脚本 | window.scrollTo / element.scrollIntoView |
| navigate | Chrome API | chrome.tabs.update({ url }) |
| newTab / closeTab | Chrome API | chrome.tabs.create / remove |
| reload | Chrome API | 支持 bypassCache,可等待加载完成 |
| goBack / goForward | 注入脚本 | history.back() / forward() |
| listTabs / activateTab | Chrome API | 标签页管理 |
| captureVisibleTab | Chrome API | 截图(png/jpeg) |
| uploadFiles | CDP | DOM.setFileInputFiles,真实文件上传 |
| queryElements / listInputs | 注入脚本 | 元素查询,返回结构化元数据 |
| extractText / extractHtml | 注入脚本 | 提取页面内容 |
| waitForSelector / waitForText | 注入脚本 | 轮询等待(200ms 间隔,默认 5s 超时) |
| runScript | 注入脚本 | new Function("args", expression) — 执行任意 JS |
| pinWorkWindow / createWorkWindow | Chrome API | 指定/创建工作窗口 |
所有元素查找都走 resolveElements(matcher, options),支持多维度匹配:
可信点击流程:
ID: fcoeoabgfenejglbffodgkkbkcdhcgfn,版本 1.0.74
注入到所有页面的 document_start,暴露全局函数:
角色推断逻辑:
敏感数据脱敏:password、cc-number、cc-csc 等自动替换为 [value redacted]
限制:最多 10000 个元素,超出后提示 truncated
| 工具 | CDP 命令 | 说明 |
|---|---|---|
| screenshot | Page.captureScreenshot | 智能缩放 + 移除其他扩展注入的元素 |
| read_page | executeScript | 调用 __generateAccessibilityTree,返回结构化文本 |
| click | Input.dispatchMouseEvent | mouseMove → mousePressed → mouseReleased |
| left_click_drag | Input.dispatchMouseEvent | 拖拽(mousePressed → mouseMoved... → mouseReleased) |
| type | Input.insertText | 直接通过 CDP 插入文本 |
| key | Input.dispatchKeyEvent | keyDown + keyUp |
| scroll | executeScript | window.scrollBy / element.scrollIntoView |
| navigate | chrome.tabs.update | 导航到 URL |
| wait | setTimeout | 等待指定毫秒 |
| tabs_context | Chrome API | 获取 tab group 中所有 tab 信息 |
| browser_batch | 组合 | 批量执行多个 action |
虚拟光标:橙色 SVG 箭头,两层(白色描边 + 橙色填充),带发光 filter
边框发光:
消息驱动:
三个职责:
SW_KEEPALIVE 消息,防止 MV3 的 30s 空闲杀死预估工作量:2-3 天
页面理解:Accessibility Tree vs 元素匹配?
Claude 的 A11y Tree 更优:让 AI 直接读页面结构,通过 ref_id 操作,不需要 AI 构造 CSS 选择器。复刻时直接搬 accessibility-tree.js(仅 7KB,未混淆)。
截图:captureVisibleTab vs CDP?
CDP Page.captureScreenshot 更灵活(支持 clip 区域、format 参数、不需要 tab 在前台),推荐用 Claude 的方案。
通信:HTTP 轮询 vs WebSocket vs Native Messaging?
HTTP 轮询最稳(不怕 SW 被杀),WebSocket 延迟更低但需要重连逻辑。如果只做本地用,HTTP 轮询 + 1s 间隔够了。
SW 保活
必须处理。用 Offscreen Document(Claude 方案)或 chrome.alarms(Codex 方案)。
Claude accessibility-tree.js(7KB,未混淆)→ ~/daily/claude-chrome-ext/unpacked/assets/accessibility-tree.js-CCweLwU2.js
Codex Bridge background.js(2270 行,未混淆)→ ~/daily/codex-chrome-bridge/unpacked/background.js,包含完整的命令执行器
Codex pageActionExecutor(Bridge background.js 内)→ 元素查找 + 事件派发逻辑,可直接搬
Claude agent-visual-indicator.js(17KB,未混淆)→ 光标 + 边框发光 + Stop 按钮,可直接复用