☰
用 invisible_playwright_mcp 让 AI 代理从供应商门户下载发票:脚本为何失效、“下载“的真实含义与月度工作流
2026/10/1 8:29:45 网站建设 项目流程
  • 人工智能
  • AI Agent
  • 浏览器控制
  • GUI 自动化
  • MCP 服务

【免费下载链接】invisible_playwright_mcp

Playwright MCP server undetected by anti-bots and captchas: AI agent browses the web on anti-detect stealth Firefox, Python, undetected browser automation, scraping, computer use.

项目地址:https://gitcode.com/GitHub_Trending/jo/invisible_playwright_mcp
点击查看免费下载

企业里最容易描述、也最折磨人的月度杂活之一,就是逐个人工登录供应商门户下载上月发票:每个门户有自己的登录方式、自己命名"Billing"的方式、自己展示上月发票的方式。这份指南以 invisible_playwright_mcp 的关联文档 为主体,结合本仓库的源码与工具面,说明用 AI 浏览器代理做这件事时真正会发生什么:为什么这项任务恰恰打败脚本、当前工具面下"下载"一词的诚实含义(没有下载工具)、保持登录跨月存活的机制(--profile-dir持久化配置目录)、一份可落地的月度工作流,以及为什么银行对账单是明确说不的对象。读完你既能用代理完成"提取发票字段"与"护送人类到发票页"两种实战方案,也能清楚知道边界在哪里、PDF 文件该由谁保存。

为什么这项任务恰恰打败脚本

脚本化浏览器自动化绝对可以登录某个门户并抓取一份 PDF——那是已解决的问题。这个任务在"乘法"上烂掉:十个门户就是十份脚本,每次门户改版都会悄悄弄坏其中一份,而发现的时间通常就是发票丢失的那个月。

商用 agent 公司 Skyvern 在其发票自动化指南里点明了原因:"每个供应商门户都有独特的导航模式、不同的发票格式和不同的下载机制。"(该引用来自 原文档的 Sources 一节,为转述其公开资料中的原话。)

Agent 翻转了维护模型:不再把每个门户的导航编码成脚本,而是陈述目标——"在这个门户上找到最近的发票"——让 agent 去读这个月页面长什么样。这与 AI 浏览器代理 vs 传统抓取 对提取场景给出的结论是同一笔交易:单次运行成本更差,但对漂移的容忍度好得多;而当任务是每月跨多个变化中的门户跑十来次时,漂移容忍度就是整个游戏。

这里"下载"一词的真实含义

在搭建任何东西之前,先把这个搞清楚。invisible_playwright_mcp 的浏览器是通过一组固定工具驱动的——navigate(导航)、read(读取)、click(点击)、type(输入)、screenshot(截图)以及它们的会话管理兄弟工具,完整列表见 MCP server 页面。这份列表里没有 download 工具,也没有 save-file 工具。Agent 的交付物是它的文本回答。对照截至写作时的工具列表,以"并下载 PDF"结尾的指令,是在要求一个 agent 没有手去做的事。

这一点可以直接在本仓库源码中验证:MCP server 暴露的工具是browser_open、browser_close、browser_list、browser_status、browser_navigate、browser_read_text、browser_snapshot、browser_read_html、browser_take_screenshot、browser_watch、browser_click、browser_click_at、browser_type、browser_select_option、browser_press_key、browser_evaluate——读取与动作两类工具齐全,唯独没有任何"落盘"工具(见 mcp-server.md 的 Tools 一节)。所以诚实的方案拆成两半,而两半都有用:

  • 要数据,不要文件。对多数会计用途,发票真正需要的是字段:号码、日期、金额、到期日、状态。这些 agent 能从门户读出并以文本返回,用 AI 代理提取数据到 CSV 的模式直接适用——命名列、说"只要 CSV"、核对行。每个门户每月一次追加到台账文件,足以覆盖对账,全程没有一个 PDF 经手。

  • 要护送,不要快递。当确实需要 PDF 原件(审计、报税)时,agent 的真实价值是把人送到那里:已登录、已穿过这个季度门户给"Billing"改的新名字、正停在发票页上。以有头模式运行(--headed,或通过 MCP 客户端设置STEALTHFOX_HEADLESS=0),浏览器就是屏幕上真实可见的 Firefox 窗口;对下载控件的最后一下点击留给你自己,在一个 agent 已开到正确位置的会话里。这种分工也是 让 AI 代理填表 关于"关键性点击"的既有建议的反向应用:让代理填好、停下来,由人做最重的那一下。

  • 第三个选项:当只需要字段时。能在浏览器自带查看器里打开的发票,是作为文本而不是图片被读取的,这更便宜也更精确。读取在浏览器内打开的 PDF 度量了这一点,并包含决定它对你是否可用的那个限制:查看器是惰性渲染的,所以一次读取长文档只返回开头部分,且没有任何提示告诉你后面缺了。

作为对比,Skyvern 出售的是完整快递服务,并声称更多:其资料称它"支持多种身份验证流程,包括标准用户名/密码组合、双因素认证和验证码(CAPTCHA)解决"。这是 Skyvern 关于自己产品的说法,引用在此是因为它界定了这个市场的商业端在承诺什么。invisible_playwright_mcp 不做此类承诺:如果门户弹出挑战,那就是需要你手动完成的会话,边界被说清楚而不是被模糊掉——这一点在 MCP server 页面的 Notes 一节 里同样是明说的:"这是一个浏览器,不是验证码破解器;它不为你解决或绕过挑战。"

月度工作流,具体步骤

每个门户今天就能跑通的流程:

1. 先亲手建立登录,一次

以持久化配置目录和可见窗口启动界面:

uvx invisible-playwright-mcp ui --headed --profile-dir ~/.hawk-invoices

让 agent 打开门户的登录页,然后你自己在真实窗口里登录。有头浏览器就是一个普通 Firefox 窗口;在它里面输入你自己的密码,好过把凭据放进提示词——因为提示词里的任何内容都会经过模型提供商。配置文件目录保住会话。

从源码看,--profile-dir的语义正是"持久化配置目录;登录跨运行存活",--headed是"以有头方式运行浏览器",二者都定义在 cli.py 的 BROWSER_OPTIONS 中。--seed(确定性指纹种子)也在同一处,它让每次访问都是同一个"返回的老浏览器",而不是一队新设备。

2. 按节奏提取,且诚实对待节奏

自 invisible_playwright_mcp 0.3.0 起,不再有可放进 cron 的无头子命令,这份指南也不会假装调度器在做一件由人启动的工作。月度运行是一个五分钟的仪式:打开同一会话(配置目录仍持有登录),粘贴同一条指令——"找到最近的发票。只回复 CSV:number,date,amount,due_date,一行,不要任何评注。"——把这一行追加进你的台账文件。用与步骤 1 相同的--seed和--profile-dir,所以每次访问都是同一个返回的浏览器,而不是一列新设备。

如果你某个门户足够稳定,"找到最新发票"每月都是同样的三次点击,那就不再是判断型工作:invisible_playwright_mcp 背后的引擎以 Python 库形式发布在 PyPI 上,接口就是 Playwright 的 API,用你门户的选择器加上profile_dir写一个短脚本,就能让这次运行真正可调度——该模式及一个已执行的示例在 用 AI 代理监控页面 上。此页不打印门户脚本,因为你的门户选择器是你的;在拿它碰钱之前,先在自己的门户上测过。

补充一句来自 监控页 的工程要点:这类脚本路径里没有任何模型、任何 key——它只读取一个信号并打印一行,判断留在 agent 那边,cron 里不放模型调用。调度节奏也要留神:整点整分的固定调度本身就是一个信号,挑奇数分钟、命令前加随机延迟,都是降低被识别为机器节奏的成本极低的动作。

3. 把它当钱来核验,因为它就是钱

Agent 返回的每个数字都是模型对页面的读解。在一行台账驱动一笔付款之前,先对着门户核对——护送模式让这很便宜,因为 agent 能把人直接送到确切页面。金额误读比漏掉发票罕见,但两者都会发生,CSV 页面的核验习惯 在行数据涉及财务时是下限而不是上限:数行数、抽几行(含最后一行)与活页对照、逐行检查字段数一致、重要时跑两遍。

会话会在月与月之间过期;当一次运行回来描述的是一张登录页而不是发票时,那是重复步骤 1 的信号,不是 bug。而如果某个曾经正常的门户干脆加载不动了,在责怪工作流之前,先按 为什么我的 AI 代理会被拦截 的四层清单排查——指纹(框架的活)、IP(你的活)、流量与节奏(共享的活),每一层相互独立,换工具往往修错层。

补充:当字段本身不够时,让脚本接手稳定门户

若门户稳定到"找到最新发票"永远是一模一样的路径,就该把判断从月度运行里拿走:agent 的成本和漂移容忍度是为此付的,但当没有判断可做时,一个InvisiblePlaywright(seed=...)+profile_dir="..."的脚本才是诚实工具——监控页 给出了可运行示例,用绝对路径给profile_dir,因为相对路径会按 cron 启动目录解析。

银行对账单:一段话的告诫

邻近的想法——把同一工作流指向银行——值得一句干脆的"不",而不是一份工作流。银行会话比任何供应商门户都防护更严,银行条款通常明文禁止自动化访问和凭据共享,一次触发的反欺诈模型可能冻结账户——这是一种完全不同于供应商门户对机器人耸耸肩的失败模式。想提供程序化对账单的银行,会通过为这个目的构建的数据共享计划和导出通道来做。对账单亲手取,或走银行自己的渠道;把自动化预算花在那些"最坏结果是运行坏掉、而不是账户被冻结"的门户上。

引向此处的常见问题,简短回答

AI 代理能自动下载我的发票吗?它能通过已保存的配置目录登录、导航到发票、把数据作为文本行提取出来;今天在 invisible_playwright_mcp 里它做不到的是自己保存 PDF——因为工具集里没有下载工具。数据提取可以无人值守运行;PDF 那一下点击是你的,在一个 agent 已开到正确页面的有头会话里。

代理如何月复一月保持登录?--profile-dir保持一个持久化配置目录,所以你在有头会话里执行过一次的登录能跨运行存活。门户会话过期时要预期去刷新它;一次报告"登录页"的运行就是在告诉你该刷新了。

它能过双因素提示或验证码吗?这里不做任何此类声称。像 Skyvern 这类厂商宣传两者都能处理;在 invisible_playwright_mcp 上,一次挑战会结束无人值守的运行并等你处理。在有头会话里手动完成它,配置目录会把结果带向前。

这比自己动手便宜吗?对少数门户,粗略地说每次运行几分钱对每月几分钟,所以是的,很快就回本。真正的节省是漏票风险:一个定时运行不会忘记每月 3 号。

我能用同样方式自动化银行对账单吗?读上面的告诫:银行条款、硬防护和账户冻结风险让它成为错误目标。用银行自己的导出通道。

提取出来的行去哪里?文本能去哪它就能去哪:通过重定向进台账 CSV,然后走 把网站数据弄进 Google Sheets 描述的导入路径进入电子表格。

一个更深一层的边界,以及为什么它成立

从引擎源码看,这套工具面在设计上就排除了文件交付:agent.py 里运行的 agent 循环只有观察、决策、执行一个动作再重复这一种形态,工具结果发给模型前被裁剪到 8,000 字符、单条回复有 8,192 token 上限,且没有任何轮次上限——循环的交付物永远是文本回答。browser_evaluate只读不写,连赋值和click()都被拒绝。这不是遗漏,而是本页立论的全部依据:"没有下载工具"这一段就是这一页:其他一切之所以成立,正因为这个限制被说清楚而不是被粉饰。把 PDF 字节的抓取留给你的手、或一个脚本,agent 负责它真正擅长的部分——判断、导航、把字段读成文本。

延伸阅读

  • 用 AI 代理从门户下载发票(原文档):本篇的主体来源
  • MCP server:完整工具列表与 STEALTHFOX_* 配置
  • 用 AI 代理提取数据到 CSV
  • 读取在浏览器内打开的 PDF
  • 用 AI 代理监控页面:可调度脚本模式
  • 为什么我的 AI 代理会被拦截:四层排查清单
  • 把网站数据弄进 Google Sheets
  • 人工智能
  • AI Agent
  • 浏览器控制
  • GUI 自动化
  • MCP 服务

【免费下载链接】invisible_playwright_mcp

Playwright MCP server undetected by anti-bots and captchas: AI agent browses the web on anti-detect stealth Firefox, Python, undetected browser automation, scraping, computer use.

项目地址:https://gitcode.com/GitHub_Trending/jo/invisible_playwright_mcp
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询