从零开始:用 Notte 框架 15 分钟上线可信赖的网络自动化代理

“我想让 AI 帮我批量整理招聘信息,但总是卡在登录验证码,怎么办?”
“公司想把数百个供应商站点数据结构化,用传统爬虫太脆弱,用纯 AI 又太贵,有折中方案吗?”
如果你也有类似的困惑,这篇文章就是答案。


目录

  1. Notte 是什么?为什么值得一学
  2. 5 分钟安装与环境准备
  3. 本地跑通第一个任务:让 AI 去 Google 图片“云吸猫”
  4. 进阶:用托管浏览器彻底解决登录、验证码、代理难题
  5. 核心功能拆解与示例

    • 结构化输出:把网页直接变成 Python 对象
    • 保险库:企业级账号密码托管
    • 数字身份:自动生成邮箱、手机号和 2FA
    • 隐形浏览器:自动过验证码、走代理
    • 混合工作流:脚本 + AI,省钱又稳
  6. 真实场景演练

    • 抓取 Hacker News 热门文章
    • 自动上传文件并下载回执
    • 批量注册并提交表单
  7. 性能对比:为什么 Notte 比同类工具快一倍
  8. 常见问题解答(FAQ)
  9. 小结与下一步阅读清单

1. Notte 是什么?为什么值得一学

一句话概括:
Notte 是一个把“传统自动化脚本”与“大模型推理”缝合在一起的全栈框架,目标是让你用最少代码、最低成本、最高可靠性完成任何需要“在浏览器里点来点去”的任务。

它分成两部分:

组件 开源版 托管版(推荐) 适用场景
浏览器会话 本地 Playwright 云端 + 自动验证码 + 代理 不想自己管浏览器
代理(Agent) Python SDK 直接调用 LLM 同上 需要高级身份、文件、Cookie 管理

核心卖点:

  • 便宜:只在真正需要 AI 推理时才调用大模型,其余用脚本,官方实测节省 50% 以上 token 费用。
  • :托管浏览器内置验证码打码、住宅代理、反检测。
  • :同样任务平均耗时 47 秒,对比 Browser-Use 113 秒。
  • :本地写完脚本,把 notte 换成 cli 就能上云,一行不改。

2. 5 分钟安装与环境准备

系统要求

  • Python 3.11+
  • 本地或云端均可

步骤

# 1) 安装核心包
pip install notte

# 2) 安装浏览器内核(只用托管版可跳过)
patchright install --with-deps chromium

# 3) 准备大模型 API Key
# 任何兼容 OpenAI 格式的接口都行,写到 .env 即可
echo "OPENAI_API_KEY=sk-xxx" >> .env

验证

# test_notte.py
import notte
from dotenv import load_dotenv
load_dotenv()

with notte.Session(headless=False) as session:
    agent = notte.Agent(session=session,
                        reasoning_model='gemini/gemini-2.5-flash',
                        max_steps=5)
    agent.run("打开 https://example.com 并截图")

运行后若能弹出浏览器并停留 5 秒,说明环境就绪。


3. 本地跑通第一个任务:让 AI 去 Google 图片“云吸猫”

import notte
from dotenv import load_dotenv
load_dotenv()

with notte.Session(headless=False) as session:
    agent = notte.Agent(session=session,
                        reasoning_model='gemini/gemini-2.5-flash',
                        max_steps=30)
    response = agent.run("去 Google 图片搜索 cat memes,向下滚动 3 屏")
    print(response.answer)

发生了什么?

  1. 浏览器启动。
  2. Agent 自动在地址栏输入 https://images.google.com
  3. 找到搜索框,输入 cat memes,回车。
  4. 向下滚动 3 次,等待图片加载。
  5. 任务完成,返回一句自然语言总结。

4. 进阶:用托管浏览器彻底解决登录、验证码、代理难题

如果你想把任务搬到云端,免去本地浏览器、代理、打码的麻烦,只需三步:

  1. Notte Console 注册,拿到 API Key。
  2. 把本地代码里的 import notte 换成 from notte_sdk import NotteClient
  3. 所有对象加前缀 cli.

示例:

from notte_sdk import NotteClient

cli = NotteClient(api_key="nt-xxx")

with cli.Session(headless=False) as session:
    agent = cli.Agent(session=session,
                      reasoning_model='gemini/gemini-2.5-flash',
                      max_steps=30)
    response = agent.run("doom scroll cat memes on google images")

本地与云端代码对比表:

维度 本地开源版 托管版
浏览器 自己维护 云端自动
验证码 手动 自动打码
代理 自己配 内置住宅轮换
并发 单机 可横向扩容
费用 免费 按量计费

5. 核心功能拆解与示例

5.1 结构化输出:把网页直接变成 Python 对象

痛点:传统爬虫用 XPath/CSS 选择器,网页一改就挂。
Notte 做法:告诉 Agent 你想要的字段,它自动推理并填充。

from notte_sdk import NotteClient
from pydantic import BaseModel
from typing import List

class HackerNewsPost(BaseModel):
    title: str
    url: str
    points: int
    author: str
    comments_count: int

class TopPosts(BaseModel):
    posts: List[HackerNewsPost]

cli = NotteClient()
with cli.Session(headless=False, browser_type="firefox") as session:
    agent = cli.Agent(session=session,
                      reasoning_model='gemini/gemini-2.5-flash',
                      max_steps=15)
    response = agent.run(
        task="去 Hacker News 首页,抓前 5 篇文章的标题、链接、分数、作者、评论数",
        response_format=TopPosts
    )
print(response.answer.posts[0])

输出示例:

HackerNewsPost(
  title='Show HN: I built a pocket-sized E-ink terminal',
  url='https://github.com/foo/bar',
  points=512,
  author='baz',
  comments_count=97
)

5.2 保险库:企业级账号密码托管

场景:需要自动登录后台,但明文写密码不安全。
解决:把凭据放进 Vault,Agent 需要时自动读取。

from notte_sdk import NotteClient

cli = NotteClient()

with cli.Vault() as vault, cli.Session(headless=False) as session:
    vault.add_credentials(
        url="https://x.com",
        username="you@corp.com",
        password="SuperSecret123"
    )
    agent = cli.Agent(session=session, vault=vault, max_steps=10)
    agent.run("打开 Twitter 并登录,进入私信列表")

优势:

  • 密码加密存储,不落盘。
  • 同域名复用,无需反复传参。
  • 支持 TOTP、SSO、MFA 令牌。

5.3 数字身份:自动生成邮箱、手机号和 2FA

场景:需要批量注册试用账号。
解决:Persona 对象替你搞定邮箱、手机号、验证码。

from notte_sdk import NotteClient

cli = NotteClient()

with cli.Persona(create_phone_number=True) as persona:
    with cli.Session(browser_type="firefox", headless=False) as session:
        agent = cli.Agent(session=session,
                          persona=persona,
                          max_steps=15)
        agent.run("打开 Google 表单,用 persona 的信息 RSVP 参加发布会")

执行流程:

  1. Persona 随机生成姓名、邮箱(可真实收信)。
  2. 如需手机验证,托管平台自动接收短信并回填验证码。
  3. 全程无痕,用完即弃。

5.4 隐形浏览器:自动过验证码、走代理

内置代理 + 打码

with cli.Session(
    solve_captchas=True,
    proxies=True,       # 自动轮换美国住宅 IP
    browser_type="firefox",
    headless=False
) as session:
    agent = cli.Agent(session=session, max_steps=5)
    agent.run("访问 reCAPTCHA 示例页并尝试通过验证")

自定义代理

from notte_sdk.types import ExternalProxy

proxy = ExternalProxy(
    server="http://proxy.corp.com:8080",
    username="corpUser",
    password="corpPass"
)

with cli.Session(proxies=[proxy]) as session:
    agent = cli.Agent(session=session, max_steps=5)
    agent.run("通过公司代理访问内网系统")

5.5 混合工作流:脚本 + AI,省钱又稳

思路:把确定性高的步骤写成脚本,需要推理时才调用 Agent。

from notte_sdk import NotteClient
import time

cli = NotteClient()

with cli.Session(headless=False, perception_type="fast") as page:
    # 脚本:直接跳到商品页
    page.execute(type="goto",
                 value="https://www.quince.com/women/organic-stretch-cotton-chino-short")
    page.observe()

    # AI:选颜色和尺码
    agent = cli.Agent(session=page)
    agent.run("选象牙白,尺码 6")

    # 脚本:加购、结账
    page.execute(type="click", selector='button[name="ADD TO CART"]')
    page.execute(type="click", selector='button[name="CHECKOUT"]')
    time.sleep(5)

收益:

  • 确定步骤不消耗 token,成本 ↓
  • AI 只处理最复杂的交互,成功率 ↑

6. 真实场景演练

6.1 抓取 Hacker News 热门文章

需求:每天把前 30 条帖子写进公司知识库。
代码:见 5.1 结构化输出示例,配合 Linux crontab 即可定时运行。

6.2 自动上传文件并下载回执

需求:报税系统要求上传 PDF 报表,再下载回执存档。

from notte_sdk import NotteClient

cli = NotteClient()
storage = cli.FileStorage()

storage.upload("/tmp/report.pdf")

with cli.Session(storage=storage) as session:
    agent = cli.Agent(session=session, max_steps=10)
    agent.run("登录报税网站,上传 report.pdf,下载回执到 storage")

receipts = storage.list(type="downloads")
storage.download(file_name=receipts[0], local_dir="./archive")

6.3 批量注册并提交表单

需求:学术会议需要 100 个测试账号投票。
做法:循环创建 Persona,每个账号自动提交一次表单即可。


7. 性能对比:为什么 Notte 比同类工具快一倍

官方在 100 个公开任务上做了横向评测(数据见 README):

工具 自报成功率 第三方评估 平均耗时 任务可靠性
Notte 86.2 % 79.0 % 47 秒 96.6 %
Browser-Use 77.3 % 60.2 % 113 秒 83.3 %
Convergence 38.4 % 31.4 % 83 秒 50 %

快的原因:

  1. 混合工作流:脚本先跑通 80% 流程,AI 只补缺口。
  2. 感知模型分层:快感知 + 慢推理,减少无意义等待。
  3. 托管基础设施:浏览器常驻、热启动,省掉冷启动 10~15 秒。

8. 常见问题解答(FAQ)

Q1:我不想用云端,可以完全本地跑吗?
可以。开源版只需本地浏览器 + LLM API Key。但验证码、代理需自己解决。

Q2:支持哪些大模型?
所有兼容 OpenAI 格式的接口,如 OpenAI、Gemini、Claude、本地 vLLM 等。

Q3:如何并行跑多个任务?
托管版支持并发会话,按量计费;本地版受限于机器资源,可自行用多进程。

Q4:Vault 里的密码安全吗?
所有凭据 AES-256 加密,密钥存于硬件安全模块,连平台方也无法解密。

Q5:遇到新版 reCAPTCHA v3 怎么办?
托管浏览器持续更新反检测策略,成功率 95% 以上;v3 无用户交互,Agent 会自动等待得分返回。


9. 小结与下一步阅读清单

今天,我们完成了:

  • 5 分钟安装并本地跑通“云吸猫”。
  • 了解如何无缝切换到托管浏览器,解锁验证码、代理、身份等高级功能。
  • 通过结构化输出、保险库、数字身份、隐形浏览器、混合工作流五大模块,覆盖 90% 网络自动化需求。
  • 用真实代码演示抓取 HN、上传下载、批量注册等场景。

下一步:

  1. 阅读官方文档:https://docs.notte.cc
  2. 尝试把公司现有 Playwright 脚本改写为混合工作流。
  3. 用 Vault + Persona 做一个小型“自动注册-登录-采数据”的 PoC。

祝你玩得开心,也欢迎把你的案例分享到社区,让自动化更简单、更可靠。