每次接到“去这个网站,把几个字段整理成表格”的需求,流程总是固定的:打开开发者工具、分析DOM、写选择器、跑脚本、报错、贴日志、再修改……周而复始。
或许你也尝试过用ChatGPT“提效”:让它生成一段Playwright代码,拷贝运行,出错后再把日志贴回去,反复调整选择器、增加等待、处理弹窗。折腾许久后会发现,这并未实现真正的自动化,只是将手动操作替换成了与AI之间的人肉调试。
真正的改变始于今年初,当我开始使用OpenClaw与Playwright这套组合之后。

一、我们到底在解决什么问题
首先明确问题,以免后续方案显得无的放矢。
传统爬虫的困境,如今已众所周知:精心编写的requests代码,发出去的请求拿回的HTML里可能只有一个<div id="app"></div>。面对JavaScript动态渲染和无限滚动,单纯的HTTP请求往往无能为力。
于是转向Selenium或Playwright脚本。数据确实能拿到了,但维护成本令人绝望——页面稍改类名,选择器就失效;遇到滑块验证码,又得接入第三方API,编写复杂的回调逻辑。
市面上并非没有其他方案。但低代码平台在处理多标签页切换、特定轨迹滑动等复杂交互时常常力不从心;而强大的云采集服务,若无现成脚本,要么付费定制,要么仍需回归代码编写。
核心痛点从来不是“会不会写脚本”,而是:能否有一种方式,让你只需清晰定义目标,将执行完全交给机器,并直接获得可用结果。
这正是“AI辅助你执行”与“AI自己去执行”的本质区别——类似于“给我一张地图”和“帮我开车到目的地”的差距。
二、为何是OpenClaw与Playwright的组合
OpenClaw是今年初在GitHub上兴起的开源项目,定位清晰:一个基于大语言模型进行决策与任务调度的AI执行框架。它擅长理解自然语言,能将“抓取所有商品并保存”这样的指令,实时转化为包含page.goto、page.fill、page.evaluate等操作的可执行代码,并在任务出错时,通过DOM语义理解自动调整选择器,无需人工重写。
Playwright则由微软在2020年开源,现已成为浏览器自动化的事实标准。与Selenium相比,其关键优势在于自动等待——在执行click()或fill()前,它会自动判断元素是否可见、可交互、未被遮挡,无需手动编写time.sleep。这对AI生成的代码尤为重要,因为AI本身无法预知网络延迟或动画时长。
此外,Playwright的API设计更贴近自然语言,如page.goto(url)、page.click(selector)、page.fill(selector, value),这显著提高了AI生成代码的准确率。其对多标签页操作、网络请求拦截(可直接捕获API响应获取JSON,比解析HTML更稳定)、截图与轨迹录制、文件下载处理的原生支持,共同构成了坚实的执行底座。
两者分工明确:OpenClaw是指挥官,Playwright是特种部队。一个负责决策,一个负责执行。其调用链路如下:

用户以自然语言提出需求
↓
LLM理解意图 → 选择对应Skill → 生成调用参数
↓
run.py接收参数 → 启动Playwright → 执行浏览器操作
↓
结构化结果回传LLM → LLM继续推理 → 最终输出结果
三、核心机制:Skill
OpenClaw中的Skill机制,是整个方案得以运行的关键。
可以将Skill理解为赋予AI的标准化工具。文件读写是一个Skill,调用外部API是一个Skill,操作浏览器也是一个Skill(即Playwright Skill)。
一个典型的Skill目录结构如下:
skills/playwright-skill/
├── SKILL.md # 给AI看的说明书
├── spec.yaml # 输入输出参数的结构化定义
├── template.md # AI组织调用的Prompt模板
└── run.py # 实际执行的引擎
其中,SKILL.md是给LLM的“工具手册”,告知其在何种情况下调用此Skill、传递何种参数、预期得到什么结果。run.py则是真正启动浏览器执行操作的地方。
这种拆分至关重要:AI负责决策,Python负责执行,两者完全解耦,可独立维护与升级。
或许你会问:我自己也会写Playwright脚本,为何需要这层封装?
原因在于,裸脚本的问题不在于“不能用”,而在于“不能持续用”。一个300行的爬虫脚本,三个月后可能连自己都难以理解其选择器逻辑。网站一旦改版,又需投入大量时间重新调试。新人接手,也需耗费大量时间熟悉上下文。
Skill化之后则不同:spec.yaml定义了标准化接口,调用方无需关心内部实现;错误处理和重试在框架层面统一管理,而非每个脚本各自为政;多个Skill(如LoginSkill、ExtractSkill、ExportSkill)可被LLM像乐高积木一样按需自由组合,每个模块都独立、可测试、可替换。
四、实战案例:抓取招投标网站的中标公告
理论易讲,来看一个真实案例。
任务背景:需要从某省招投标官网,抓取近一个月所有中标公告的详细信息,包括项目名称、招标单位、中标单位、中标金额、预算金额。
难点:页面为单页应用(SPA),数据由JavaScript动态渲染,直接使用requests只能获取空壳HTML;公告列表需按日期标签页切换,每个标签页下含有多页数据;每条记录的详情需点击进入,数据分散在不同区域;网站存在简单的登录态校验。
以往处理此类任务,仅分析页面结构、编写初版脚本就需大半天,调试与处理边界情况还需额外一天。
现在的流程:
第一步,部署与配置。 在服务器上启动OpenClaw,启用Playwright Skill。配置文件核心项如下:
yaml
browser:
headless: true
timeout: 30000
viewport:
width: 1920
height: 1080
concurrency:
max_tabs: 3
request_delay: 1500 # 每次操作至少间隔1.5秒
output:
screenshot_on_error: trueheadless: true表示在无头(无界面)模式下运行,节省资源。request_delay用于模拟人工操作节奏,降低被识别为爬虫的风险,后续会专门讨论此点。
第二步,下达指令。 这是最简化的步骤,无需编写任何代码,只需在对话框中输入自然语言指令:
请访问 [网站URL],使用账号 [账号] 和密码 [密码] 登录。然后点击“中标公告”标签页,获取从今天起往前30天内的数据。对每一天的标签页逐一点击进入,翻页直至加载完全部公告列表。针对每条公告,点击进入详情页,提取以下信息:项目名称、招标单位、中标单位、中标金额(单位:万元)、预算金额(单位:万元)。最后将结果整理为Markdown表格,保存至output.md文件。若遇到金额信息缺失,则用“未披露”填充。
第三步,AI拆解任务,多Skill协作执行。
LLM 收到指令后,会将任务拆解为几个标准化的技能模块来执行:LoginSkill 处理登录并保存 Cookie 供后续复用;NavigateAndFilterSkill 循环处理日期筛选 Tab,进入每日列表、翻页、收集所有公告链接,最终输出一份 URL 列表;DetailExtractSkill 逐条打开详情页,等待动态内容完全渲染后再提取信息,避免因“元素未加载”而报错;最后由 ExportSkill 进行数据清洗,统一金额等格式,并写入 Markdown 表格。
整个过程耗时约 4-8 分钟,具体取决于网络状况与公告数量。
对比改造前后的关键指标:
| 指标 | 以前(纯脚本) | 现在(OpenClaw) |
| :— | :— | :— |
| 初次开发耗时 | 6-12 小时 | 5 分钟下达指令 |
| 调试和迭代 | 每次页面改版需重写脚本 | 修改自然语言描述,AI 重新适配 |
| 所需技能 | Python + Playwright + 页面分析 | 会打字 |
| 可复用性 | 脚本绑定特定网站 | Skill 通用,更换网站只需修改指令 |
五、几个让效果翻倍的实用技巧
- 上下文复用,性能提升 80%:不要为每次任务都启动新的浏览器实例。利用 Playwright 的 BrowserContext,在 OpenClaw 中实现多任务并行——如同在一个浏览器内核中开启多个互不干扰的无痕窗口,启动速度大幅提升。
- 资源拦截,只取所需:在指令中加入“忽略图片和样式表”,OpenClaw 会自动生成对应的路由拦截代码,例如
await page.route('**/*.{png,jpg,css}', route => route.abort());,这能使页面加载速度提升 50% 以上,对抓取大量列表页尤其有效。 - 人类化操作,对抗反爬:避免毫秒级的精准操作。在指令中要求“操作时模仿人类,每步之间随机停顿 1-3 秒”,OpenClaw 便会引入随机延迟和贝塞尔曲线鼠标轨迹。
- 大型项目使用页面对象模型(POM):对于超大型项目,建议在 OpenClaw 中将“登录”、“翻页”、“提取”等操作封装成独立的 Skill 模块。当网站改版时,只需更新对应的模块,其他流程可照常运行。
六、能做什么?几个真实的落地场景
除了数据采集,这套组合在实际项目中还有多种应用方向:
- 自动化回归测试:指示 AI “遍历产品主要功能流程,记录每一步截图,若出现 500 错误或 UI 元素不符,则生成 Bug 报告”。这相当于让 AI 扮演测试工程师,自动执行测试用例。
- 竞品价格监控:设置定时任务,让 AI 每日打开竞品定价页,截图并提取价格,与前一天对比,如有变动则推送至飞书群。无需维护专门的监控服务,一个 Skill 组合即可搞定。
- 批量后台操作(RPA):例如,管理后台中有数百个历史订单需要逐条核对状态后关闭。此类重复性操作交给 AI,比人工点击更快速、准确,且每次操作可自动截图留证,出错时自动暂停等待处理。
- 内容生成流水线:抓取行业新闻 → 调用大模型生成摘要 → 格式化写入 Notion 数据库。Playwright Skill 负责获取原材料,后续加工由 LLM 完成,形成完整的自动化流水线。
七、该说的坑,一个都不省
- 验证码是真正的硬关卡:Cloudflare 的 5 秒盾、复杂图像识别验证码、行为验证(如拖拽滑块)——这些是 Playwright 直接无法解决的。需要结合代理 IP 池降低识别概率、设置合理的随机延迟模拟人工节奏,必要时接入第三方打码服务。
request_delay参数不宜设置过短,它比想象中更重要。 - 内存消耗不容小觑:启动一个 Chromium 实例约消耗 200-400 MB 内存。三个 Tab 并发,基础内存消耗就可能达到 1 GB。本地运行尚可,但
max_tabs参数不宜设置过高。生产环境建议使用具备独立内存的云服务器,并配合任务队列进行合理调度。 - Selector 写法决定脚本寿命:即使是 AI 生成的代码,也需注意审查元素定位方式:优先使用
data-testid、aria-label、role等属性定位;其次考虑基于文本内容定位(如“点击包含‘提交’字样的按钮”);尽量避免使用.container > div:nth-child(3) > span这类依赖页面结构的 CSS 路径,因为结构一旦改版便会失效,而基于语义的描述更具鲁棒性。 - 账号安全别图省事:涉及登录态的 Skill,切勿将账号密码明文写在指令中。应使用 OpenClaw 的凭证管理机制,通过环境变量或加密存储传入。
最后,请注意访问礼节。并非所有网站都欢迎爬取。遵守 robots.txt 协议,设置合理的访问频率,避免一秒内发送数十个请求。这既是技术实践,也是基本的职业素养。
八、总结
我并非在宣称“以后再也不需要编写代码了”——这不现实,也无需如此绝对。
但有一类工作确实在快速消失:即那些“你知道该做什么,只是没时间去做”的重复性自动化任务。浏览器操作便是其中最典型的例子,因为浏览器是软件世界最通用的接口。
OpenClaw + Playwright Skill 这套组合,本质上是将“编写程序来控制计算机”这件事,降低到了“用自然语言指挥一个懂工具的 AI”的层级。Skill 体系是其中的关键——它将一次性脚本转变为可复用的标准化能力,让 AI 不仅会思考,还会执行,并能将结构化的执行结果反馈回来,驱动下一步的推理。
关注“鲸栖”小程序,掌握最新AI资讯
本文来自网络搜集,不代表鲸林向海立场,如有侵权,联系删除。转载请注明出处:https://www.itsolotime.com/archives/24697
