当前位置: 首页 > article >正文

chrome-cdp工作原理解析:如何通过WebSocket与Chrome DevTools协议通信

chrome-cdp工作原理解析如何通过WebSocket与Chrome DevTools协议通信【免费下载链接】chrome-cdp-skillGive your AI agent access to your live Chrome session — works out of the box, connects to tabs you already have open项目地址: https://gitcode.com/gh_mirrors/ch/chrome-cdp-skillchrome-cdp是一个轻量级Chrome DevTools Protocol (CDP)工具它能让AI代理直接访问您的实时Chrome会话无需额外配置即可连接到已打开的标签页。本文将深入解析其工作原理特别是如何通过WebSocket实现与Chrome DevTools协议的通信。什么是Chrome DevTools协议CDPChrome DevTools协议是一套强大的API允许开发者与Chrome浏览器进行交互实现调试、性能分析、页面控制等功能。传统上这需要通过Chrome DevTools界面或复杂的库如Puppeteer来使用。而chrome-cdp则提供了一种更轻量级的方式直接通过WebSocket与CDP通信无需额外依赖。chrome-cdp的核心优势chrome-cdp的设计理念是轻量级和即开即用主要优势包括无依赖不需要安装Puppeteer等大型库使用Node.js内置的WebSocket模块高效连接直接与已打开的Chrome标签页建立连接支持100标签页持久会话每个标签页通过守护进程daemon保持连接避免重复授权简单易用提供直观的命令行接口如snap获取页面结构、shot截图、eval执行JavaScript等WebSocket通信的工作流程chrome-cdp通过WebSocket与Chrome DevTools协议通信的过程可以分为四个关键步骤1. 发现Chrome调试接口首先chrome-cdp需要找到Chrome的远程调试接口。它会搜索多个可能的位置来查找DevToolsActivePort文件该文件包含了调试端口信息// 搜索可能的DevToolsActivePort位置 const candidates [ process.env.CDP_PORT_FILE, // macOS路径 ...macBrowsers.flatMap(b [ resolve(home, Library/Application Support, b, DevToolsActivePort), ]), // Linux路径 ...linuxBrowsers.flatMap(b [ resolve(home, .config, b, DevToolsActivePort), ]), // Windows路径 ...(IS_WINDOWS ? [Google/Chrome, BraveSoftware/Brave-Browser].flatMap(b [ resolve(base, b, User Data/DevToolsActivePort), ]) : []), ];找到端口文件后它会读取文件内容获取WebSocket URLws://127.0.0.1:port/devtoolsFrontendUrl2. 建立WebSocket连接chrome-cdp创建了一个CDP类来管理WebSocket连接实现了协议的核心通信功能class CDP { #ws; #id 0; #pending new Map(); #eventHandlers new Map(); async connect(wsUrl) { return new Promise((res, rej) { this.#ws new WebSocket(wsUrl); this.#ws.onopen () res(); this.#ws.onerror (e) rej(new Error(WebSocket error: e.message)); this.#ws.onmessage (ev) { const msg JSON.parse(ev.data); // 处理响应和事件... }; }); } // 发送CDP命令 send(method, params {}, sessionId) { const id this.#id; return new Promise((resolve, reject) { this.#pending.set(id, { resolve, reject }); const msg { id, method, params }; if (sessionId) msg.sessionId sessionId; this.#ws.send(JSON.stringify(msg)); // 超时处理... }); } }3. 标签页会话管理chrome-cdp采用了每个标签页一个守护进程的架构。当您第一次访问某个标签页时会启动一个后台守护进程// 启动标签页守护进程 async function getOrStartTabDaemon(targetId) { const sp sockPath(targetId); // 尝试连接现有守护进程 try { return await connectToSocket(sp); } catch {} // 启动新的守护进程 const child spawn(process.execPath, [process.argv[1], _daemon, targetId], { detached: true, stdio: ignore, }); child.unref(); // 等待守护进程就绪 for (let i 0; i DAEMON_CONNECT_RETRIES; i) { await sleep(DAEMON_CONNECT_DELAY); try { return await connectToSocket(sp); } catch {} } throw new Error(Daemon failed to start — did you click Allow in Chrome?); }这个守护进程会处理所有针对该标签页的命令并在闲置20分钟后自动退出既保证了操作的连续性又不会浪费系统资源。4. 执行CDP命令一旦建立连接chrome-cdp就可以发送各种CDP命令。例如获取页面截图的实现async function shotStr(cdp, sid, filePath, targetId) { // 获取设备像素比(DPR) let dpr 1; try { const metrics await cdp.send(Page.getLayoutMetrics, {}, sid); dpr metrics.visualViewport?.clientWidth / metrics.cssVisualViewport?.clientWidth || 1; } catch {} // 发送截图命令 const { data } await cdp.send(Page.captureScreenshot, { format: png }, sid); const out filePath || resolve(RUNTIME_DIR, screenshot-${targetId.slice(0, 8)}.png); writeFileSync(out, Buffer.from(data, base64)); return Screenshot saved. Device pixel ratio (DPR): ${dpr}; }实际应用示例chrome-cdp提供了丰富的命令行接口让您可以轻松与Chrome交互1. 列出所有打开的页面scripts/cdp.mjs list2. 对指定页面截图scripts/cdp.mjs shot target [file]3. 在页面上执行JavaScriptscripts/cdp.mjs eval target document.title4. 点击页面元素scripts/cdp.mjs click target button.submit坐标系统转换使用截图和点击功能时需要注意坐标系统的转换。Chrome的截图使用设备像素而CDP的输入事件使用CSS像素CSS像素 截图图像像素 / DPR设备像素比例如在DPR2的Retina屏幕上截图中(200, 300)的像素点对应CSS坐标(100, 150)需要使用clickxy命令时应传入后者。结语chrome-cdp通过WebSocket直接与Chrome DevTools协议通信提供了一种轻量级、高效的方式来控制和调试Chrome浏览器。其设计理念使得AI代理能够轻松访问和操作浏览器内容为自动化测试、网页数据提取、无障碍测试等场景提供了强大支持。无论是开发者还是AI代理都可以通过简单的命令行接口利用Chrome DevTools协议的全部能力而无需深入了解协议细节。这正是chrome-cdp的价值所在简化复杂技术让强大功能触手可及。要开始使用chrome-cdp只需克隆仓库并按照说明启用Chrome的远程调试功能git clone https://gitcode.com/gh_mirrors/ch/chrome-cdp-skill然后您就可以立即体验这个强大工具带来的便利探索Chrome DevTools协议的无限可能。【免费下载链接】chrome-cdp-skillGive your AI agent access to your live Chrome session — works out of the box, connects to tabs you already have open项目地址: https://gitcode.com/gh_mirrors/ch/chrome-cdp-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

chrome-cdp工作原理解析:如何通过WebSocket与Chrome DevTools协议通信

chrome-cdp工作原理解析:如何通过WebSocket与Chrome DevTools协议通信 【免费下载链接】chrome-cdp-skill Give your AI agent access to your live Chrome session — works out of the box, connects to tabs you already have open 项目地址: https://gitcode.…...

量子纠缠检测的SWAP测试原理与光子芯片实现

1. 量子纠缠检测的核心挑战与SWAP测试原理量子纠缠作为量子计算最独特的资源,其检测与量化一直是量子信息科学的核心课题。传统纠缠见证方法通常需要完整量子态层析,这随系统规模呈指数级增长的计算复杂度严重制约了实际应用。而基于SWAP测试的两比特纠缠…...

Motor Admin与现有系统集成:无缝对接企业应用生态

Motor Admin与现有系统集成:无缝对接企业应用生态 【免费下载链接】motor-admin Deploy a no-code admin panel for any application in less than a minute. Search, create, update, and delete data entries, create custom actions, and build reports. 项目地…...

开源代码审计工具opencode:基于异常检测的智能安全扫描实践

1. 项目概述:一个开源代码审计与异常检测工具最近在跟几个做安全开发的朋友聊天,大家普遍提到一个痛点:项目大了,代码库动辄几十万行,每次上线前的人工代码审计(Code Review)都像大海捞针&#…...

Dantotsu常见问题解答:解决登录失败、下载错误与性能优化技巧

Dantotsu常见问题解答:解决登录失败、下载错误与性能优化技巧 【免费下载链接】Dantotsu Anilist client based on Saikou 项目地址: https://gitcode.com/gh_mirrors/da/Dantotsu Dantotsu是一款基于Saikou的Anilist客户端,为动漫爱好者提供便捷…...

ARM1020E处理器勘误与硬件调试实战指南

1. ARM1020E Rev1处理器勘误深度解析作为一名长期从事ARM架构开发的工程师,我深知处理器勘误(Errata)对系统稳定性的关键影响。今天我将结合ARM1020E Rev1的实际案例,分享三类勘误的处理经验,特别是硬件调试中的典型问…...

GAN七日实战:从原理到PyTorch实现

1. 生成对抗网络入门指南:7天速成实战路线第一次接触GAN时,我被它生成的人脸图片震撼得说不出话——那些根本不存在的人像,连皮肤纹理和发丝都栩栩如生。作为计算机视觉领域的革命性技术,生成对抗网络(GAN)…...

Preact高阶组件:逻辑复用的终极设计模式指南

Preact高阶组件:逻辑复用的终极设计模式指南 【免费下载链接】preact ⚛️ Fast 3kB React alternative with the same modern API. Components & Virtual DOM. 项目地址: https://gitcode.com/gh_mirrors/pr/preact 在现代前端开发中,高效的…...

如何快速掌握Preact:从零开始的现代前端框架完整指南

如何快速掌握Preact:从零开始的现代前端框架完整指南 【免费下载链接】preact ⚛️ Fast 3kB React alternative with the same modern API. Components & Virtual DOM. 项目地址: https://gitcode.com/gh_mirrors/pr/preact Preact是一个仅4kB大小的现代…...

正则表达式终极指南:10个文本处理匹配技巧

正则表达式终极指南:10个文本处理匹配技巧 【免费下载链接】interview 📚 C/C 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。This repository is a summary of the b…...

如何快速定制Material Design Lite主题:掌握SCSS变量与颜色系统的终极指南

如何快速定制Material Design Lite主题:掌握SCSS变量与颜色系统的终极指南 【免费下载链接】material-design-lite Material Design Components in HTML/CSS/JS 项目地址: https://gitcode.com/gh_mirrors/ma/material-design-lite Material Design Lite&…...

CGraph扩展开发指南:如何自定义节点与适配器

CGraph扩展开发指南:如何自定义节点与适配器 【免费下载链接】CGraph 【A common used C & Python DAG framework】 一个通用的、无三方依赖的、跨平台的、收录于awesome-cpp的、基于流图的并行计算框架。欢迎star & fork & 交流 项目地址: https://g…...

掌握Noto Emoji:构建跨平台表情符号的终极视觉工具箱

掌握Noto Emoji:构建跨平台表情符号的终极视觉工具箱 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 当你发送一个笑脸表情时,是否曾想过它如何在iPhone、Android和Windows电脑上保持完全…...

智能体技能开发实战:从工具调用到系统架构的完整指南

1. 项目概述与核心价值最近在探索智能体(Agent)开发时,我发现了一个宝藏仓库:heilcheng/awesome-agent-skills。这不仅仅是一个简单的列表,而是一个由社区驱动的、关于智能体“技能”的精选知识库。简单来说&#xff0…...

langsmith-fetch技能:调试LangChain和LangGraph代理的必备工具

langsmith-fetch技能:调试LangChain和LangGraph代理的必备工具 【免费下载链接】awesome-codex-skills A curated list of practical Codex skills for automating workflows across the Codex CLI and API. 项目地址: https://gitcode.com/GitHub_Trending/aw/aw…...

Spring Boot Demo快速入门:5分钟搭建第一个HelloWorld应用

Spring Boot Demo快速入门:5分钟搭建第一个HelloWorld应用 【免费下载链接】spring-boot-demo 🚀一个用来深入学习并实战 Spring Boot 的项目。 项目地址: https://gitcode.com/gh_mirrors/sp/spring-boot-demo Spring Boot Demo是一个用来深入学…...

如何设计高效政务办理系统:React Router路由架构终极指南

如何设计高效政务办理系统:React Router路由架构终极指南 【免费下载链接】react-router Declarative routing for React 项目地址: https://gitcode.com/GitHub_Trending/re/react-router 在数字化政务服务快速发展的今天,如何构建一个流畅、直观…...

owl4ce/dotfiles双主题切换:从机械风到艺术风的完美转换

owl4ce/dotfiles双主题切换:从机械风到艺术风的完美转换 【免费下载链接】dotfiles :cherry_blossom: Aesthetic OpenboxWM Environment 项目地址: https://gitcode.com/gh_mirrors/dotfiles8/dotfiles owl4ce/dotfiles是一个专为OpenboxWM打造的美学环境配置…...

owl4ce/dotfiles桌面环境核心组件深度解析

owl4ce/dotfiles桌面环境核心组件深度解析 【免费下载链接】dotfiles :cherry_blossom: Aesthetic OpenboxWM Environment 项目地址: https://gitcode.com/gh_mirrors/dotfiles8/dotfiles GitHub 加速计划 / dotfiles8 / dotfiles 是一个专注于打造美观 OpenboxWM 环境的…...

Cloudflare HTML 解析器的十年演化史(二)

本文是 Cloudflare HTML 解析系列的第二篇。上篇讲了从 2010 年到 2016 年,Cloudflare 如何从一堆临时解析器走向 LazyHTML。这篇从 2017 年接着讲——当 Cloudflare Workers 上线之后,为什么 LazyHTML 不够用了,以及 LOL HTML 如何从架构层面…...

ADB Idea多设备支持完全指南:智能设备选择与记忆功能

ADB Idea多设备支持完全指南:智能设备选择与记忆功能 【免费下载链接】adb-idea A plugin for Android Studio and Intellij IDEA that speeds up your day to day android development. 项目地址: https://gitcode.com/gh_mirrors/ad/adb-idea ADB Idea是一…...

Cloudflare HTML 解析器的十年演化史(一)

本文基于 Cloudflare 工程博客系列文章第一篇,梳理了 Cloudflare 从 2010 年起构建 HTML 流式解析器的完整历程。这不是一篇"又一个 HTML 解析器"的介绍,而是一个工程团队在极端性能约束下,反复与现实妥协、不断重建的真实故事。原…...

Keras深度学习实战:从官方文档到社区资源全指南

1. 为什么需要Keras深度学习帮助资源?当你第一次打开Keras文档时,可能会被那些简洁的API示例所迷惑。表面上看起来几行代码就能实现一个神经网络,但真正投入实战时,各种意想不到的问题就会接踵而至。我至今记得自己第一次尝试用Ke…...

serversideup/php性能调优:从开发到生产的完整优化策略

serversideup/php性能调优:从开发到生产的完整优化策略 【免费下载链接】docker-php 🐳 Production-ready Docker images for PHP. Optimized for Laravel, WordPress, and more! 项目地址: https://gitcode.com/gh_mirrors/do/docker-php server…...

英特尔模块化PC设计解析与维修经济性探讨

1. Intel模块化PC设计提案解析英特尔近期发布了一份关于模块化PC设计的白皮书,提出了一种全新的可维修笔记本电脑和迷你PC架构方案。这个提案的核心目标是通过模块化设计提升设备的可维修性,同时减少电子垃圾的产生。作为一名长期关注PC硬件发展的技术从…...

超强Python指南python-guide:Web自动化与浏览器控制终极教程

超强Python指南python-guide:Web自动化与浏览器控制终极教程 【免费下载链接】python-guide Python best practices guidebook, written for humans. 项目地址: https://gitcode.com/gh_mirrors/py/python-guide GitHub 加速计划的 py/python-guide 是一份面…...

Copilot Next 工作流配置不再玄学:12个可复制的settings.json片段,附真实项目性能对比数据(+47.2%编码速度)

更多请点击: https://intelliparadigm.com 第一章:Copilot Next 工作流配置不再玄学:从认知重构到效能跃迁 传统 Copilot 配置常陷入“模板堆砌—反复试错—局部调优”的循环,而 Copilot Next 的核心突破在于将工作流视为可声明、…...

数值型特征选择实战:方法与最佳实践

1. 特征选择的核心价值与挑战当你的数据集包含成百上千个数值型特征时,特征选择就像在嘈杂的派对上寻找真正有价值的对话。我在处理金融风控数据集时曾遇到一个典型案例:原始数据包含387个特征,但实际建模发现只有23个真正影响预测结果。盲目…...

Meteor云原生:Kubernetes集群部署终极指南

Meteor云原生:Kubernetes集群部署终极指南 【免费下载链接】meteor Meteor, the JavaScript App Platform 项目地址: https://gitcode.com/gh_mirrors/me/meteor Meteor作为JavaScript应用平台,提供了从开发到部署的全栈解决方案。本文将详细介绍…...

Ruby LLM框架:为Ruby开发者打造的AI应用开发利器

1. 项目概述:一个为Ruby语言量身打造的LLM应用框架如果你是一名Ruby开发者,最近被各种AI应用搞得心痒痒,想在自己的Rails项目里集成一个智能聊天助手,或者给后台加个自动生成报告的功能,那你可能已经发现了一个尴尬的现…...