简介
jakubkulhan/chrome-devtools-protocol 是一个优秀的 PHP 客户端库,让 PHP 开发者能够通过 Chrome DevTools Protocol (CDP) 与 Chrome/Chromium 浏览器进行深度交互。
CDP 是 Chrome 浏览器内置的调试协议,允许开发者远程控制浏览器的几乎所有功能,包括页面导航、截图、PDF 生成、网络监控、DOM 操作等。
安装
composer require jakubkulhan/chrome-devtools-protocol
核心概念
1. Context(上下文)
用于设置操作的超时时间:
use ChromeDevtoolsProtocol\Context;
// 创建一个 30 秒超时的上下文
{{LATEX:0}}launcher = new Launcher();
{{LATEX:1}}launcher->launch({{LATEX:2}}tab = {{LATEX:3}}ctx);
{{LATEX:4}}ctx);
// 获取 DevTools 客户端
{{LATEX:5}}tab->devtools();
基础用法示例
页面截图
use ChromeDevtoolsProtocol\Context;
use ChromeDevtoolsProtocol\Launcher;
use ChromeDevtoolsProtocol\Model\Page\CaptureScreenshotRequest;
{{LATEX:6}}launcher = new Launcher();
{{LATEX:7}}launcher->launch({{LATEX:8}}tab = {{LATEX:9}}ctx);
{{LATEX:10}}ctx);
{{LATEX:11}}tab->devtools();
try {
{{LATEX:12}}ctx);
{{LATEX:13}}ctx,
NavigateRequest::builder()
->setUrl("https://www.example.com/")
->build()
);
{{LATEX:14}}ctx);
// 捕获截图
{{LATEX:15}}devtools->page()->captureScreenshot({{LATEX:16}}response->data));
} finally {
{{LATEX:17}}instance->close();
}
生成 PDF
use ChromeDevtoolsProtocol\Model\Page\PrintToPDFRequest;
{{LATEX:18}}ctx, PrintToPDFRequest::make());
高级特性
1. 隔离的浏览器上下文(Browser Context)
类似于无痕模式窗口,每个上下文拥有独立的 Cookie、LocalStorage 等数据:
{{LATEX:19}}launcher = new Launcher();
{{LATEX:20}}launcher->launch({{LATEX:21}}session = {{LATEX:22}}ctx);
try {
// \(session 实现了 DevtoolsClientInterface
// 可以像操作普通标签页一样使用\)session->page()->enable(\(ctx);\)session->page()->navigate(\(ctx, ...);
} finally {\)session->close(); // 销毁上下文,相关数据也被清除
}
} finally {
{{LATEX:26}}instance = new Instance("localhost", 9222);
{{LATEX:27}}tab = {{LATEX:28}}ctx);
{{LATEX:29}}ctx);
{{LATEX:30}}tab->devtools();
// ... 进行操作
// 注意:不需要调用 ->close(),因为没有启动新进程
实际应用场景
1. 网页爬虫与数据抓取
- 执行 JavaScript 渲染的动态页面抓取
- 绕过简单的反爬虫机制
- 模拟用户交互行为
2. 自动化测试
- 端到端(E2E)测试
- 视觉回归测试(通过截图对比)
- 性能测试
3. 文档生成
- 将 HTML 转换为 PDF
- 生成网页缩略图
- 批量截图服务
4. 网页监控
- 监控网页性能指标
- 捕获网络请求
- 检测页面错误
相关资源
- GitHub 仓库: https://github.com/jakubkulhan/chrome-devtools-protocol
- Packagist: https://packagist.org/packages/jakubkulhan/chrome-devtools-protocol
- Chrome DevTools Protocol 文档: https://chromedevtools.github.io/devtools-protocol/
- 协议监控工具: Chrome DevTools → Settings → Experiments → Protocol Monitor
注意事项
- Chrome 安装: 确保系统已安装 Chrome 或 Chromium 浏览器
- 资源释放: 始终使用
try-finally确保\(devtools->close()` 和 `\)instance->close()被调用 - 超时设置: 根据网络状况合理设置 Context 的超时时间
- 内存管理: 长时间运行的服务需要注意 Chrome 进程的内存占用
总结
这个 PHP 客户端库为 PHP 开发者打开了 Chrome DevTools Protocol 的大门,让我们能够在 PHP 生态中实现原本需要 Node.js (Puppeteer) 或 Python (Selenium/Playwright) 才能完成的浏览器自动化任务。对于需要与浏览器深度集成的 PHP 项目来说,这是一个非常有价值的工具。
License: MIT
作者: Jakub Kulhan
登录后可参与表态
讨论回复
1 条回复
QianXun (QianXun)
#1
2026-04-28 02:07
登录后可参与表态
推荐
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
领取 2000万 Tokens
通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力