首页 / 文章

选择Playwright还是浏览器代理?为何脚本自动化仍更具优势

Playwright脚本与MCP驱动的浏览器代理:脆弱性、确定性及成本,同一发票处理任务在两种方式下的表现,安全风险以及各自的适用场景。

发布者:REACTAPP.TOP阅读约 8 分钟1835 词

来源: Playwright vs WebMCP: Will Browser Automation Survive the Agent Era?

网页最初是为人们点击链接和阅读页面而设计的。Selenium、Puppeteer和Playwright则让代码来执行点击操作。十多年来,浏览器自动化意味着要编写脚本,详细列出每一步操作,然后反复运行。如今,AI智能体正在改变这一状况。它们能够进行推理、规划并采取行动,还能像人类一样浏览页面:查看内容、理解其含义、决定下一步该做什么。这就引出了一个关键问题:模型上下文协议(MCP)是否会让基于脚本的自动化变得过时,还是Playwright依然有存在的价值?

为什么开发者喜欢Playwright

由微软开发的Playwright是一种现代的浏览器自动化框架。使用该框架编写的代码可以驱动Chromium、Firefox或WebKit来点击按钮、填写表单、抓取数据以及运行端到端测试。以下是一个简短的示例:

const { chromium } = require('playwright');
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com/login');
await page.fill('#email', 'user@example.com');
await page.fill('#password', 'secret');
await page.click('button[type="submit"]');
await page.waitForURL('**/dashboard');
console.log('Logged in!');
await browser.close();

其结果清晰、确定且可预测。它广受欢迎的原因如下:

  • 内置跨浏览器支持。
  • 测试隔离与并行运行功能极为可靠。
  • 自动等待功能取代了传统的 sleep(2000) 写法。
  • 支持追踪、截图及视频录制功能。
  • 可轻松集成到 CI/CD 流水线中。

在质量保证自动化、回归测试以及脚本化网页工作流领域,它堪称行业标准。

脚本的局限性

其缺点在于脆弱性。只要更改按钮的CSS类,脚本就会失效;移动表单字段也会导致故障;即便推出采用新布局的A/B测试版本,依然会出问题。每个脚本都是对页面某一时刻外观的固定假设映射,而用户界面始终在变化。在发展迅速的公司中维持庞大的Playwright脚本套件,几乎等同于另一份全职工作。

打个比方有助于理解:脚本就像一张城市导览的层压卡片,只要道路未封闭、建筑未搬迁或没有单行道出现,它就能正常使用。而更好的导航工具则会观察周围环境、阅读路标,并实时调整路线。

MCP的贡献

MCP是由Anthropic在2024年底推出的开放标准,旨在以结构化方式将Claude等AI模型与外部工具、数据源及环境连接起来。它相当于一种通用的智能体插件系统。模型无需局限于聊天窗口内,便可访问数据库、API、文件系统以及网页浏览器。

目前已有Playwright MCP服务器,它将浏览器操作转化为智能体可调用的函数。开发者只需编写类似这样的代码:

await page.click('#submit-button');

代理会收到一个目标:

"Submit the contact form on acme.com with the user's name and email"

它通过视觉识别、HTML解析和推理能力来导航、定位元素并与页面交互,全程无需任何硬编码的选择器。

直接对比

Playwright:传统方法

  • 控制方式:开发者需编写每一步操作。
  • 选择器:CSS、XPath或文本。
  • 对UI变化的适应性:UI发生变化时会导致程序失效。
  • 设置复杂度:中等,因为需要编写代码。
  • 确定性:完全确定性强。
  • 调试难度:较低,有追踪日志和截图辅助。
  • 速度:较快。
  • 成本:仅涉及计算资源。
  • 最佳适用场景:回归测试及CI/CD流水线。
  • 可靠性:若得到妥善维护则较高。

WebMCP或Playwright MCP:智能代理方法

  • 控制方式:由AI代理进行推理并做出决策。
  • 选择器:自然语言结合视觉理解。
  • 对界面变化的适应能力:通过基于当前DOM重新推理来调整。
  • 设置成本:较低,只需描述目标即可。
  • 确定性:非确定性,因为涉及大语言模型的推理过程。
  • 调试难度:较高,因为需要探究智能体为何选择该操作。
  • 速度:由于大语言模型推理的开销,速度较慢。
  • 成本:包括计算资源消耗以及大语言模型API调用费用。
  • 最适合的场景:动态任务、复杂工作流及智能体应用。
  • 可靠性:正在提升,但尚未达到生产级标准。

同一任务,两种方法

任务内容:登录SaaS控制面板,找到最新的发票并将其下载为PDF格式。

使用Playwright时,脚本会导航至登录页面,通过data-testid选择器填写邮箱和密码,点击登录按钮,然后逐步执行后续操作。

await page.goto('https://app.saas.com/login');
await page.fill('[data-testid="email"]', credentials.email);
await page.fill('[data-testid="password"]', credentials.password);
await page.click('[data-testid="login-btn"]');
await page.waitForSelector('.dashboard');
await page.click('nav >> text=Billing');
await page.click('.invoice-list tr:first-child .download-btn');
await page.waitForEvent('download');

试想一下,在代码重构时如果重命名了data-testid属性,或者账单导航被移到了侧边栏,又或者发票表格的分页方式发生变化,会出现什么情况。

在有代理的情况下,指令会以通俗的语言形式呈现为一个目标:

Goal: "Go to app.saas.com, log in with my credentials,
navigate to billing, find the most recent invoice,
and download it as a PDF."

该代理会加载页面并读取DOM结构与视觉布局,通过语义识别出登录表单,填写凭证后提交。接着它会查找标有“账单”“发票”等字样的导航选项,按日期找到最新的发票并点击下载。如果用户界面发生变化,它会重新读取页面并作出相应调整,无需更新任何脚本。

从脚本编程到指令驱动

传统的自动化技术会明确要求计算机执行哪些具体步骤,而代理时代的自动化技术则关注期望达到的结果,以及人工智能是否能够自行找到相应的步骤。换句话说,脚本编程负责规划路径,而指令驱动则负责设定目标。

对于那些简单、稳定、处理量大的任务,比如在持续集成环境中进行10,000次回归测试,Playwright的确定性优势始终明显。而对于那些复杂、多变、需要一次性完成的流程,类似人类助手会处理的任务,通过MCP驱动的浏览器代理则表现更为出色。

此区域出现的工具

该生态系统发展迅速:

  • Playwright MCP,一种官方MCP服务器,可将Playwright浏览器操作功能提供给AI智能体。
  • Browserbase推出的Stagehand,一种结合了Playwright与LLM视觉功能的原生AI自动化工具。
  • Browser Use,用于构建网页浏览智能体的开源框架。
  • Anthropic的Claude Computer Use,能够查看并控制整个桌面或浏览器的系统。
  • OpenAI Operator,一种能够通过浏览网页来完成任务的GPT-4o智能体。
  • Skyvern,一种基于视觉识别与LLM的自动化工具,无需使用选择器即可工作。

这些并非玩具,各公司将其应用于采购流程、数据提取、表单提交以及竞争对手监控等领域,而这些工作原本可能需要数月的脚本编写时间。

Playwright会消失吗?

不会,不过它的角色正在发生变化。它依然非常重要,但已不再是唯一的工具。它类似于SQL:在处理结构化任务时具有基础性、精确性且不可替代,但已不再是获取答案的唯一途径。未来会针对不同任务选择合适的处理方式。

如何在这两者之间做选择

决策过程可以按照流程图来进行。首先判断任务是否具有明确的定义和稳定的用户界面。如果是,并且需要在大规模环境中重复执行,比如在持续集成或回归测试中,那么脚本是最佳选择。如果用户界面会变化或任务只是偶尔执行一次,那么使用自动化代理会更合适。

Is the task well-defined with a stable UI?
        │
        ├── YES → Does it run repeatedly at scale (CI/CD, regression)?
        │              │
        │              ├── YES → Use Playwright
        │              └── NO  → Either works; Playwright is cheaper
        │
        └── NO → Is the UI dynamic, unknown, or frequently changing?
                       │
                       ├── YES → Use MCP Agent / AI Browser
                       └── NO  → Does it require multi-step reasoning?
                                      │
                                      ├── YES → Use MCP Agent
                                      └── NO  → Use Playwright

未来两年

自动化工具不会一夜之间取代脚本化流程,但已有几大趋势显现。

  1. 混合式流程变得普遍。 Playwright可处理那些稳定且重复的80%任务,而MCP代理则负责处理每轮迭代中那些会破坏脚本的不可预测的20%任务。
  2. Playwright将获得AI功能。 可以期待出现选择器修复功能,即当某个选择器失效时,它会请求大语言模型在更新后的页面中找到对应的元素。Healenium和Reflect已经实现了类似功能,Playwright也很可能提供原生支持。
  3. 代理的可靠性提升。 目前的代理有时会误读页面、点击错误的元素,或被弹窗干扰。像GPT-4o、Claude 3.5 Sonnet和Gemini 2.0这样的更先进的多模态模型应该能大幅减少这类故障。
  • QA的方式正在发生变化。测试人员不再需要编写Playwright脚本,而是用自然语言表达测试意图,由智能代理负责解读并执行这些指令,从而从编写脚本转向明确预期结果。
  • 安全性成为亟待解决的问题。具备自主浏览器控制能力的智能代理可能会点击到意外内容、提交错误数据的表单,或被恶意页面操控。通过网页内容进行即时注入攻击——即让页面诱使智能代理执行非预期操作——早已被记录为一种威胁。而这正是Playwright的最大优势,因为它只会按照脚本的指示行事,绝不会多做任何多余操作。
  • 整体视角

    十年来,浏览器自动化一直是个“翻译”问题:如何将人类的意图转化为能够模拟人类操作的代码。Playwright出色地解决了这一问题。如今,自动化工具已省去了这一翻译步骤,因为用通俗语言表达的意图就已足够,后续工作由工具自行处理。但这并不意味着Playwright过时了,它只是变得更加专业化,就如同在机器人手术时代外科医生依然会使用手术刀一样。手术刀能提供精确度、控制力与可靠性,而机器人则能处理复杂任务、具备适应性并实现大规模操作。现在的实际问题不再是Playwright与MCP谁更优,而是何时需要手术刀,何时需要机器人。

    相关阅读

  • 利用四台MCP服务器在LM Studio中构建本地研究代理 — 将文件系统、GitHub、SearXNG和Camofox的MCP服务器整合到同一个LM Studio聊天界面中,简化工具架构,添加研究计划提示,并通过演示验证其功能。
  • MCP与OAuth2:谁授权了代理的行为? — 为何OAuth2仅能覆盖MCP下代理授权的一部分功能,以及OIDC、作用域、混淆代理规则、GNAP和能力机制是如何相互配合的。
  • 用十七个小型MCP工具而非一个巨型智能体:一种AI写作系统 —— 该研究与写作系统如何将视频获取、搜索、草稿撰写、评审及代码验证等功能拆分到独立的MCP工具中,并实现结果输出与流程追踪。
  • 实用指南:“MCP:将AI从聊天机器人转变为AI智能体的协议 —— 针对正在开发MCP系统的团队,提供包含契约定义、校验规则及可直接使用的代码模板的详细操作指南。
  • WebMCP详解:让网站直接提供工具,而非由智能体点击用户界面 — WebMCP使网站能够直接向AI智能体提供诸如add_todo之类的工具,从而取代依赖截图的点击操作。文章涵盖了工具定义、OAuth机制以及该技术为何仍处于发展初期等内容。
  • AI智能体的截图证据:全页捕获、区域提取与差异对比 — 为什么智能体需要的不仅仅是Playwright的截图:包括完整全页捕获、区域裁剪、哈希存储、无噪声的差异对比功能,以及监控机制和受限的MCP使用额度。