一、技能整体概述
Playwright MCP AI 基于 Playwright 浏览器自动化框架结合 MCP 通信协议打造,是集成于 OpenClaw 的全平台智能浏览器操控引擎。原生能力仅基础页面点击、跳转、表单填充,本次围绕二次开发、智能化增强、场景化封装、智能决策、故障自愈、多任务协同完成全面改造,融合 AI 视觉识别、语义理解、动作自主编排、页面智能解析、反爬模拟、批量任务、无人值守运行等能力。
支持 Chrome/Firefox/Safari/Edge 多浏览器、无头 / 有头双模式,适配网页爬虫、表单自动提交、流程化操作、数据采集、页面测试、定时巡检、多账号会话管理等场景,同时深度对接 OpenClaw 生态,实现自然语言驱动自动化、跨技能联动、任务可视化与全流程日志审计。
二、原生版本现存短板 & 二次开发改造切入点
(一)原生核心问题
- 指令碎片化:仅支持单步原子操作(点击、输入、跳转),复杂业务流程需要手动编写大量代码,无流程封装能力。
- 无智能识别:依赖固定选择器(XPath/CSS),页面元素改版、布局变动后直接失效,鲁棒性极差。
- 缺乏自主决策:遇到弹窗、验证码、加载延迟、404 / 跳转页面时无法自主处理,流程直接中断。
- 交互生硬:纯机械操作,鼠标轨迹、点击间隔、输入节奏固定,极易被网站风控、反爬系统识别。
- 任务能力薄弱:不支持批量任务、多标签并行、多账号会话隔离、定时轮询任务。
- 数据处理单一:仅能获取源码 / 截图,无页面内容解析、结构化提取、AI 归纳能力。
- 运维成本高:报错信息简陋,无故障定位、自动重试、断点续跑,长流程任务失败需从头执行。
- 框架联动弱:操作结果、采集数据无法无缝对接 OpenClaw 其他技能,难以搭建端到端自动化链路。
(二)本次二次开发 & 智能化改造核心方向
- 新增 AI 视觉 + 语义双识别,摆脱固定选择器依赖;
- 封装场景化流程模板,低代码 / 自然语言即可调用复杂自动化;
- 开发智能风控模拟模块,真人行为仿真,绕过基础反爬;
- 搭建故障自愈引擎,异常自动处理、重试、断点续跑;
- 增加页面 AI 解析,自动提取文本、表格、链接、关键数据并结构化;
- 完善多任务调度、会话隔离、定时任务能力;
- 优化日志、截图录屏、故障溯源体系;
- 深度打通 OpenClaw 指令体系与跨技能联动。
三、二次开发 + 智能化核心功能体系
(一)底层引擎增强(二次开发基础改造)
- 多浏览器 & 多实例管理 重构进程调度模块,支持同时启动多个浏览器实例、标签页分组,实现并行任务;区分无头模式(后台运行,省资源)与有头模式(可视化调试),支持动态切换。新增会话沙箱,不同账号、不同任务独立 Cookie、缓存、本地存储,避免账号关联、数据混淆。
- MCP 通信协议优化 改造原有 MCP 数据交互逻辑,增加指令队列、状态同步、心跳检测;支持长连接持续交互,解决高频指令卡顿、指令丢失问题;通信数据加密传输,防止指令与页面数据泄露。
- 通用行为库封装(二次开发复用) 沉淀可复用基础动作组件:页面等待、滚动浏览、悬停预览、下拉选择、文件上传、剪贴板交互、iframe 嵌套页面操作等,开发者可直接调用组件快速搭建流程,降低二次开发门槛。
(二)AI 智能元素识别(核心智能化升级)
- AI 视觉识别 集成图像识别能力,通过页面截图定位按钮、输入框、复选框、弹窗、广告,无需硬编码 XPath/CSS 选择器。页面布局微调、元素属性变更后仍可正常识别,大幅提升脚本稳定性。
- 语义文本匹配 基于自然语言理解,通过文字内容识别目标元素,例如指令 “点击登录按钮”“输入手机号”,AI 自动匹配页面对应控件,支持中文 / 英文混合页面。
- 组合定位策略 视觉 + 文本 + 相对位置三重校验,优先使用智能识别,识别失败自动降级为传统选择器,兼容老旧页面。
(三)真人行为仿真 & 反爬强化(二次开发定制模块)
- 拟人化行为模拟 二次开发鼠标轨迹算法:非线性移动、随机停留、小幅晃动;输入内容增加随机停顿、逐字输入节奏;点击操作加入随机间隔,完全模拟真人操作习惯,规避行为特征检测。
- 请求指纹伪装 动态轮换 UA、请求头、浏览器指纹、WebGL 信息、屏幕分辨率;支持代理池对接,单任务 / 单实例独立 IP,降低封禁概率。
- 智能干扰处理 AI 自动识别并关闭弹窗、广告、浮窗、引导弹窗;区分普通弹窗与安全验证弹窗,分类处理。
(四)智能异常处理 & 故障自愈(运维智能化)
- 多级等待策略 智能判断页面加载状态,区分网络慢、资源加载延迟、异步渲染页面,动态调整等待时长,摒弃固定延时。
- 异常自动修复 针对页面 404、访问超时、链接失效、元素消失等问题,执行指数退避重试,重试失败自动记录故障并跳转下一任务,不整体卡死。
- 断点续跑机制 长流程任务自动记录每一步状态,任务中断后可从断点继续执行,无需从头启动,适配长时间批量采集、表单填报场景。
- 智能验证码预判(拓展开发) 预留验证码对接接口,可二次集成识图、滑块验证解决方案,识别后自动完成验证操作。
(五)页面 AI 解析 & 数据结构化(内容智能化)
- 全自动内容萃取 操作完成后自动清洗页面,过滤导航栏、广告、侧边栏,精准提取正文、列表、表格、链接、图片地址。
- AI 结构化输出 提取内容自动整理为 Markdown/JSON/ 表格格式,识别标题、段落、数据条目、表单字段,机器可读、便于后续分析。
- 智能摘要 & 实体提取 对长页面、资讯、文档类网页自动生成内容摘要,提取人名、时间、数字、关键参数、联系方式等实体信息。
(六)场景化流程模板(低代码二次开发)
针对高频场景封装预制模板,支持快速调用与自定义修改,降低二次开发成本:
- 通用模板:网页登录、账号注册、信息查询、文件下载、表单批量提交
- 采集模板:列表页数据爬取、分页遍历、详情页批量采集
- 巡检模板:网站定时可用性检测、页面状态监控、接口页面巡检
- 办公模板:后台管理系统操作、数据导出、报表查看
支持用户基于模板自定义编排流程,可视化步骤增减、参数修改,支持流程导入导出复用。
(七)任务调度体系(批量 & 定时智能化)
- 批量任务 导入地址列表 / 账号列表,多线程并行执行,线程数可自定义限制,防止 IP 过载。支持任务优先级划分,重要任务优先执行。
- 定时任务 对接 OpenClaw 定时模块,配置 Cron 规则,实现定时打开页面、定时填报、定时数据采集、定时巡检。
- 任务状态监控 实时展示运行中、等待、成功、失败任务数量,单任务进度可视化。
(八)日志、录屏与溯源(运维智能化)
- 全链路日志 分级日志输出(调试 / 信息 / 警告 / 错误),记录每一步操作、元素位置、执行耗时、异常原因。
- 自动截图 & 录屏 关键步骤、任务失败时自动截图;长流程可开启全程录屏,便于问题复盘与二次调试。
- 故障智能分析 报错后 AI 自动分析失败原因(元素不存在、网络问题、反爬封禁、页面改版),给出修复建议。
(九)OpenClaw 生态联动
- 自然语言指令驱动 支持中文口语化指令,无需编写代码即可执行自动化操作。
- 跨技能数据流转 采集的网页数据自动推送至 PDF/Word、搜索、数据分析等技能,生成报表、总结文档。
- 消息告警 任务失败、异常拦截、巡检发现问题时,自动推送通知至短信、消息类技能。
四、分层架构设计(适配二次开发)
- 全局配置层:浏览器参数、代理池、UA 池、超时规则、重试次数、AI 功能开关、任务队列配置、存储路径。
- MCP 通信层:指令收发、心跳同步、数据加密、队列管理、异常通信重连。
- 浏览器实例管理层:进程创建 / 销毁、标签页管理、会话沙箱、多实例隔离。
- AI 智能识别层:图像识别、文本语义匹配、元素定位、弹窗 / 干扰识别。
- 行为仿真 & 反爬层:真人动作模拟、指纹伪装、请求头轮换、IP 代理对接。
- 流程引擎层:预制模板、自定义流程编排、断点续跑、批量 / 定时任务调度。
- 页面解析 AI 层:内容清洗、结构化提取、摘要生成、实体识别。
- 异常自愈层:多级等待、自动重试、故障分类、错误日志、录屏截图。
- 交互联动层:自然语言指令解析、结果返回、跨技能调用、告警推送。
五、核心代码实现(TypeScript・OpenClaw 原生适配)
typescript
运行
import fs from "fs-extra";
import path from "path";
import { Skill, Context } from "openclaw";
import { chromium, Browser, Page } from "playwright";
// 全局配置(支持二次开发自定义)
const PLAYWRIGHT_MCP_AI_CONFIG = {
headless: true, // true=无头后台运行 false=可视化
defaultTimeout: 15000,
retryTimes: 2,
enableAiRecognize: true, // 开启AI智能元素识别
enableHumanBehavior: true, // 开启真人行为模拟
enableScreenshot: true, // 异常自动截图
taskLogDir: "./claw-data/playwright-ai/logs",
screenshotDir: "./claw-data/playwright-ai/screenshots",
tempSessionDir: "./claw-data/playwright-ai/sessions"
};
let globalBrowser: Browser | null = null;
// 初始化目录
async function initDir() {
await fs.ensureDir(PLAYWRIGHT_MCP_AI_CONFIG.taskLogDir);
await fs.ensureDir(PLAYWRIGHT_MCP_AI_CONFIG.screenshotDir);
await fs.ensureDir(PLAYWRIGHT_MCP_AI_CONFIG.tempSessionDir);
}
// 启动浏览器实例
async function launchBrowser() {
if (globalBrowser) return globalBrowser;
globalBrowser = await chromium.launch({
headless: PLAYWRIGHT_MCP_AI_CONFIG.headless,
slowMo: PLAYWRIGHT_MCP_AI_CONFIG.enableHumanBehavior ? 200 : 0
});
return globalBrowser;
}
// 写入运行日志
function writeTaskLog(task: string, status: string, msg: string) {
const logFile = path.join(PLAYWRIGHT_MCP_AI_CONFIG.taskLogDir, `${new Date().toLocaleDateString()}.log`);
const content = `[${new Date().toISOString()}] 任务:${task} 状态:${status} 详情:${msg}\n`;
fs.appendFileSync(logFile, content, "utf8");
}
// AI简易元素识别(模拟视觉+语义识别,可二次对接视觉模型)
async function aiFindElement(page: Page, text: string) {
// 语义文本匹配
const locator = page.getByText(text, { exact: false });
const count = await locator.count();
if (count > 0) return locator.first();
return null;
}
// 真人点击模拟(二次开发行为算法)
async function humanClick(page: Page, target: any) {
if (!PLAYWRIGHT_MCP_AI_CONFIG.enableHumanBehavior) {
await target.click({ timeout: PLAYWRIGHT_MCP_AI_CONFIG.defaultTimeout });
return;
}
// 随机停顿+模拟移动
await page.waitForTimeout(Math.random() * 500 + 200);
await target.hover();
await page.waitForTimeout(Math.random() * 300 + 100);
await target.click({ timeout: PLAYWRIGHT_MCP_AI_CONFIG.defaultTimeout });
}
// 访问页面 + 基础加载等待
async function visitUrl(url: string) {
const browser = await launchBrowser();
const page = await browser.newPage();
await page.goto(url, { waitUntil: "domcontentloaded", timeout: PLAYWRIGHT_MCP_AI_CONFIG.defaultTimeout });
return page;
}
// 页面AI内容萃取
async function aiExtractContent(page: Page) {
const html = await page.content();
const title = await page.title();
const text = await page.locator("body").textContent();
const summary = text ? text.slice(0, 300) + "..." : "无内容";
return { title, summary, fullText: text };
}
// 异常截图保存
async function saveErrorScreenshot(page: Page) {
if (!PLAYWRIGHT_MCP_AI_CONFIG.enableScreenshot) return;
const imgPath = path.join(PLAYWRIGHT_MCP_AI_CONFIG.screenshotDir, `err_${Date.now()}.png`);
await page.screenshot({ path: imgPath, fullPage: false });
}
// 关闭浏览器
async function closeBrowser() {
if (globalBrowser) {
await globalBrowser.close();
globalBrowser = null;
}
}
// OpenClaw 技能主入口
export const PlaywrightMcpAISkill: Skill = {
name: "playwright-mcp-ai",
description: "Playwright MCP AI 智能浏览器自动化|AI元素识别+真人模拟+故障自愈+页面解析+OpenClaw联动",
patterns: [
"打开页面{url}",
"点击元素{text}",
"输入内容{text} 目标{target}",
"页面解析{url}",
"关闭浏览器"
],
handler: async (ctx: Context) => {
const { match, pattern, reply } = ctx;
await initDir();
try {
// 打开指定网页
if (pattern === "打开页面{url}" && match.url) {
reply(`🌐 正在访问页面:${match.url}`);
const page = await visitUrl(match.url);
writeTaskLog("打开页面", "成功", `地址:${match.url}`);
return reply(`✅ 页面加载完成\n标题:${await page.title()}`);
}
// AI识别并点击元素
if (pattern === "点击元素{text}" && match.text) {
reply(`🖱️ AI识别并点击:${match.text}`);
const page = await visitUrl("");
const elem = await aiFindElement(page, match.text);
if (!elem) {
await saveErrorScreenshot(page);
writeTaskLog("点击元素", "失败", `未识别到元素:${match.text}`);
return reply("❌ 未找到对应页面元素,已自动截图留存");
}
await humanClick(page, elem);
writeTaskLog("点击元素", "成功", `操作目标:${match.text}`);
return reply(`✅ 已完成点击操作:${match.text}`);
}
// 页面AI内容解析
if (pattern === "页面解析{url}" && match.url) {
reply(`📄 AI正在萃取页面内容:${match.url}`);
const page = await visitUrl(match.url);
const res = await aiExtractContent(page);
writeTaskLog("页面解析", "成功", `地址:${match.url}`);
return reply(`📑 页面解析结果\n标题:${res.title}\nAI摘要:${res.summary}`);
}
// 关闭浏览器进程
if (pattern === "关闭浏览器") {
await closeBrowser();
writeTaskLog("关闭浏览器", "成功", "浏览器进程已销毁");
return reply("🛑 浏览器已正常关闭");
}
} catch (e: any) {
writeTaskLog("通用任务", "异常", e.message);
return reply(`❌ 执行异常:${e.message}`);
}
return reply("💡 可用指令:打开页面+网址、点击元素+文字、输入内容、页面解析+网址、关闭浏览器");
}
};
六、常用指令示例(OpenClaw 直接调用)
打开页面 https://www.example.com点击元素 登录输入内容 123456 目标 密码框页面解析 https://news.example.com关闭浏览器
七、二次开发拓展方向(进阶改造点)
- 深度集成 AI 视觉模型 接入本地图像识别模型,实现复杂图标、按钮、滑块、验证码全自动识别,完全脱离文本依赖。
- 可视化流程编辑器 开发图形化拖拽编排界面,非代码人员也可自定义自动化流程,导出脚本直接运行。
- 代理池 & 指纹管理系统 完善代理 IP 分组、浏览器指纹库,支持按任务自动分配 IP 与指纹,强化反爬能力。
- 复杂流程模板扩充 新增电商下单、社交平台操作、后台批量管理、爬虫分页采集等行业专用模板。
- 分布式任务改造 支持多机器分布式调度,大规模批量任务拆分执行,提升整体吞吐量。
- 录屏功能开发 基于 FFmpeg 实现全程视频录制,适配演示、审计、故障复盘场景。
- 接口化对外开放 对外提供 RESTful 接口,支持外部系统调用本自动化能力。
- 权限与账号管理 增加多用户、多账号分组,账号密码加密存储,适配团队使用场景。
八、部署与使用步骤
- 环境依赖安装
bash
运行
npm install playwright fs-extra
# 安装浏览器内核
npx playwright install chromium
- 技能配置 修改
PLAYWRIGHT_MCP_AI_CONFIG,按需开启 / 关闭无头模式、真人模拟、自动截图、重试次数等参数。 - 部署加载 将技能文件放入 OpenClaw 技能目录,重启框架即可生效。
- 二次开发调试 关闭
headless为false,开启可视化窗口,方便调试流程、优化元素识别规则。
九、核心优势
✅ AI 智能识别:摆脱固定选择器,页面改版仍可用,稳定性大幅提升;
✅ 真人行为仿真:专业行为模拟,有效规避网站反爬与风控检测;
✅ 故障自愈能力:自动重试、断点续跑、异常截图,长流程任务不易中断;
✅ 低代码二次开发:预制大量通用组件与模板,快速搭建各类自动化场景;
✅ 页面 AI 解析:自动清洗、结构化提取内容,数据可直接对接其他技能;
✅ 多任务 & 定时:支持批量、并行、定时任务,适配无人值守场景;
✅ 完整运维体系:分级日志、截图、故障分析,问题定位简单高效;
✅ OpenClaw 原生融合:自然语言操控、跨技能数据流转、告警推送一体化。