Playwright + AI 智能体混合架构(一):AI 和确定性脚本的分界线在哪里

并不是所有浏览器操作都适合 AI。导航、认证、重复抓取用脚本做更快更稳。结构变化适配、异常处理、罕见参数组合才需要 AI。分错了成本翻倍。

亿牛云技术团队2026年4月14日4 分钟阅读

一个错误的默认假设

很多人启动一个 AI 浏览器自动化项目时,默认假设是:让 AI 智能体来完成所有操作。

这是一种成本极高的默认假设。大语言模型每处理一个网页的 DOM(3000-5000 token),成本约为 $0.0045-$0.0075。如果智能体需要 10 步才能完成一个任务,那就是 $0.045-$0.075。乘以每天 10,000 个任务,每天 $450-$750。每月超过一万美元。

对比同一个任务用确定性脚本实现:一次编写,无限次零成本执行(忽略基础设施成本)。

但脚本的问题是:一旦页面结构改变,脚本就失效了。AI 智能体可以适应结构变化——这是它的核心价值。

所以正确的分界线是:稳定路径用脚本,不稳定路径用 AI。

分界线一:哪些操作应该用脚本

导航

从一个 URL 到另一个 URL。这个过程没有决策空间,不需要 AI 参与。

# Bad: AI 做导航:每次消耗 token
# "打开 example.16yun.cn 的登录页面"
# → AI 推理 → 调用 page.goto → 消耗 ~500 token
 
# Good: 脚本做导航:零推理成本
page = await browser.new_page()
await page.goto("https://example.16yun.cn/login")

认证(常规)

使用固定的用户名和密码登录固定的表单。如果表单结构不变化,脚本比 AI 快 3-5 倍。

# Good: 确定性登录
await page.fill("#username", "user@example.16yun.cn")
await page.fill("#password", "mypassword")
await page.click("#login-button")
await page.wait_for_selector("#dashboard")

但如果表单结构可能变化(字段位置、名称、验证方式改变),或者需要处理 CAPTCHA,那就需要 AI 介入。

重复数据提取

如果目标页面的 CSS 选择器是稳定的,直接用脚本提取。

# Good: 稳定选择器的数据提取
prices = await page.eval_on_selector_all(
    ".product-price",
    "elements => elements.map(e => e.textContent)"
)

性能对比

操作类型脚本耗时AI 耗时AI 成本(近似)
page.goto0.5-2s2-5s(含推理)$0.003-0.007
表单填写(3 字段)0.3s5-15s(含推理)$0.01-0.03
数据提取(10 字段)0.1s3-10s(含推理)$0.005-0.02
CAPTCHA 处理N/A(需外部服务)依赖模型能力不确定

分界线二:哪些操作应该用 AI

结构变化的适应

电商网站在改版。旧的产品详情页 CSS 选择器全失效了。脚本返回空数据。AI 智能体可以理解页面变化并重新定位目标信息。

# AI 接管结构变化的场景
task = """
在 example.16yun.cn 的产品详情页上找到以下信息:
1. 产品名称
2. 价格
3. 库存状态
页面的结构可能发生了变化,请先识别内容的位置再提取。
"""
result = await agent.run(task)

异常处理

脚本在操作步骤 5 失败了——"未找到元素"。原因可能是页面弹出了一个意外的隐私协议弹窗。AI 可以识别弹窗并关闭它。

# 脚本失败 → AI 接管异常处理
try:
    await page.click("#checkout-button")
except Exception as e:
    # 切换到 AI 处理异常
    task = f"""
    点击结算按钮时出现异常:{str(e)}
    请检查页面状态,如果弹出了对话框或警告,处理它。
    """
    await agent.run(task)

罕见参数组合

一个表单有 20 个字段,每次需要不同的参数组合。脚本需要维护 20 个变量的模板。AI 可以直接理解自然语言描述的目标并填写。

# Good: AI 适合:参数组合不确定
task = """
在 example.16yun.cn/report 页面设置以下条件:
- 日期范围:2026 年第一季度
- 地区:华东区
- 产品线:消费电子
- 对比基准:去年同期
- 输出格式:PDF
"""
result = await agent.run(task)

分界线三:如何设计切换机制

基线模式

最可落地的设计模式是:脚本执行 80% 的常规操作,当脚本检测到异常时,切换到 AI 处理。 AI 处理完成后,记录新的选择器,把增量更新应用到脚本中。

class HybridAutomator:
    def __init__(self):
        self.script_engine = ScriptEngine()
        self.ai_agent = AIAgent()
        self.selector_cache = {}
 
    async def extract_price(self, url):
        # 先用脚本尝试
        try:
            return await self.script_engine.extract_price(url)
        except SelectorNotFoundError:
            # 脚本失败,AI 接管
            price = await self.ai_agent.extract_price(url)
            # 记录新的选择器模式,下次脚本可直接使用
            selector = await self.ai_agent.discover_selector(url, "price")
            self.selector_cache[url] = selector
            return price

切换时机的评估

不是错误都值得切换 AI。以下指标可以帮助决策:

  • 失败率:如果选择器的失败率低于 5%,继续用脚本
  • 变化频率:如果页面每周改版超过一次,考虑长期使用 AI
  • 操作成本:如果 AI 处理的单次成本低于脚本维护成本,切换
  • 恢复难度:如果脚本操作不可逆(已提交的订单),切换到 AI 做决策前确认

总结

混合架构的关键不是让 AI 做所有事,而是让 AI 做它擅长的事:处理不确定性和异常。

脚本做它擅长的事:精确、快速、低成本地执行确定性操作。

分界线画错了,成本就会翻倍——无论是运行成本(都用 AI)还是维护成本(都用脚本)。

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。