
人工智能AI Agent浏览器控制GUI 自动化MCP 服务【免费下载链接】invisible_playwright_mcpPlaywright 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点击查看免费下载在服务器上跑 browser-use 的 AI 代理经常遇到同一个场景笔记本上一切正常一上服务器就撞上验证码或 challenge 页。问题通常不在代理本身也不在 prompt而在它驱动的浏览器和那台机器——而这两者里只有一小部分能从配置文件里碰到。这篇文章以BrowserProfile为线索逐项说明哪些配置真的有用、哪些配置永远够不到、agent 会话独有的节奏信号长什么样以及想换掉 Chromium 引擎时唯一走得通的 MCP 路线——这条路线正是本仓库invisible_playwright_mcp所基于的实现。读完你会得到一套完整的排查顺序先分清问题属于哪一堆再决定是调配置、换机器还是换引擎。说明文中关于 browser-use 的细节BrowserProfile字段、Chromium-only 的channel、cdp_url、默认自动化掩码参数均按原文档记录作者曾于 2026-09-03 对照browser_use/browser/profile.py复核关于本仓库引擎、MCP 服务器与配置变量的部分则以当前仓库源码为准。一、先分清被拦的往往不是 agent也不是 promptbrowser-use 的代理在本地跑得好好的部署到服务器就收到 challenge 页最常见的原因是代理在两边是同一个机器不是同一个。浏览器是代理开的那台浏览器但它运行在什么样的 GPU、字体、音频、屏幕和网络栈之上是另一回事。任何 agent 框架都改变不了机器级的事实浏览器-use 也不例外。这篇文章就是把这堆事情分好类BrowserProfile实际暴露了什么哪些设置值得用哪些设置什么都够不到什么信号是 agent 驱动的会话特有的以及换一个引擎这个问题的诚实答案。二、BrowserProfilebrowser-use 给的全部可调旋钮BrowserProfile是 browser-use 的配置面一份交给浏览器会话的启动参数与上下文参数模板。与拦截相关的字段如下字段作用executable_path启动哪个浏览器二进制——文档上注明为 Chromium 系可执行文件channelChromium 频道chromium、chrome、beta/dev/canary 变体、Edge 变体user_data_dir持久化 profile 目录proxy代理设置server、bypass、用户名、密码headless无头还是有头args附加命令行参数cdp_url通过 CDP 连接一个已在运行的浏览器而不是启动一个新的这确实是一组真实可用的杠杆其中两个比大多数人用得更有价值executable_path和user_data_dir。2.1 把executable_path指向你真实的 Chrome这个字段期望的是 Chromium 家族浏览器——channel枚举里的每一个值都是 Chromium、Chrome 或 Edge没有 Firefox。它的实际用途是把你已安装的 Chrome 指进来而不是用随包附带的测试用 Chromium。两者不是同一个浏览器编解码器集合不同、品牌标识不同而一个真实安装的 Chrome 是远比捆绑构建常见得多的事物。对检测来说一个真实存在的桌面浏览器和一个自动化项目捆绑的构建产物是两个不同的指纹。2.2 给user_data_dir一个过去把user_data_dir指向一个真正用过的 profile 目录是这份配置里价值最高的单项改动因为它是唯一一个针对历史而不是针对硬件的设置。一个从空 profile 起步的代理就是一个哪儿都没去过的浏览器——全新浏览器得分低的大部分原因就在这里。两个陷阱必须先知道profile 锁死profile lock-in一旦 profile 目录被浏览器占用重复启动同一个目录可能因锁而失败身份一致性profile 必须搭配一个一致的身份来使用——换个说法一个登录状态被另一套硬件指纹不同的种子/指纹承载和换台电脑登录一样显眼。值得一提的是本仓库在身份一致性上走得更远在invisible_playwright_mcp的 MCP 服务器里身份由seed决定同一个 seed 永远是同一个指纹而profile 目录自己拥有它的 seed——首次在新 profile 上打开浏览器时会把这个身份写进 profile之后每次打开都复用同一个所以登录不会穿不同的硬件回来。如果你显式要求的 seed 与 profile 携带的 seed 冲突服务器会直接拒绝并同时报出两个数字绝不会悄悄替你选一个见 配置解析实现 与 MCP 服务器文档 中关于 seed 与 profile 的说明。2.3 别高估默认的自动化掩码browser-use 的默认启动参数里已经带了自动化掩码--disable-blink-featuresAutomationControlled及相关 flag。它掩盖的是最粗糙的驱动标记属于表面功夫对下一节列出的任何一项都毫无作用。不要把掩码存在当成指纹干净。三、没有任何配置够得到的东西机器级六项BrowserProfile的任何一个字段都改不了下面这些——它们全部是机器的属性而在服务器上它们会同时成立没有 GPUWebGL 上报的是软件渲染器容器字体集与所声称的操作平台对不上没有音频设备音频相关取值回落到默认值没有任务栏的屏幕分辨率是默认值编解码器支持描述的是一个精简构建而不是桌面安装TLS 握手由网络栈决定发生在任何页面级设置存在之前。这正是笔记本上能跑、Docker 里被拦成为最常见问题形态的原因代理在两个地方完全一样机器不一样。换个角度理解指纹是一张照片行为是一段动作研究。把照片修得完美不会让动作研究变好。本仓库的引擎invisible_playwright一个在 C 层面打过补丁的 Firefox的职责就是照片这一层渲染、驱动表面、网络握手都读起来像真正的 Firefox。它真实而且覆盖了大部分拦截原因但它不是全部这个边界必须诚实——引擎控制的是浏览器是什么而不是它上方的循环以什么节奏决定行动。节奏由模型和调用模型的 harness 产生在浏览器之上、引擎够不到的地方。四、agent 会话特有的信号think-act 节奏browser-use 会话以及所有 LLM 代理会话携带一个普通爬虫没有的信号think-act 循环的节奏。代理读页面、调模型、等待、再行动于是它的行为模式与人有四点显著不同间隙聚簇动作之间的等待围绕模型推理延迟聚拢步复一步、轮复一轮——人的停顿散布得又宽又参差这里一秒一瞥那里八秒一读。单个数字不是信号分布的形态才是停顿中的静止人读页面时会漂移指针、微滚页面、悬停代理的指针在停顿期间纹丝不动然后精准到达目标动作瞬间落在正中心坐标来自页面结构或截图落在目标中心没有接近、没有过冲、没有修正、点击前没有阅读时间没有浪费的动作人会滚过头、开错标签、悬停在从不点击的东西上、改变主意代理只执行任务需要的动作高效且可见。没有任何框架的 stealth 设置能修复这个信号因为它产生在浏览器之上。这一信号的完整剖析见 AI 代理发出的时序信号。本仓库在这方面的边界同样诚实invisible_playwright_mcp的系统提示词要求模型在行动前先检查页面并偏好一次一个清晰动作而非长链见 agent.py 的 SYSTEM_PROMPT引擎让每次点击的指针走弯曲的人形路径、让键入走真实按键——这些改善的是单个动作的形态。步与步之间的间隙分布仍是模型延迟穿上风衣的样子无论单个动作多像人它都可见。4.1 最廉价的诊断记录拦截何时到来节奏信号顺带给了你全篇最便宜的诊断记录拦截发生的时间点。拦截发生在第一次页面加载指向机器或地址——即上面列出的那些机器级指纹清单拦截发生在几次交互之后指向行为或流量而 代理的重试循环通常是流量那一半。一个重试和重新规划的循环会把一条指令变成一屏请求一次失败被回喂给模型、模型重新规划、换选择器、重读页面、重新加载——每一次都是一次新请求。速率限制只计数它不看它从不打开浏览器只数这个窗口内来自该地址、该账户或该会话的请求数然后与阈值比较。最逼真的浏览器每请求也只能把计数器加一。4.2 框架能做的与不能做的本仓库对自己的循环约束也做了精确说明没有回合上限循环一直运行到模型停止调用工具为止见 agent.py 的 run 循环单次回复有 8,192 token 上限指令在单浏览器上串行执行接口提供一个运行中变成红色停止按钮的人工停止开关。诚实地说人是停止器不是节流阀。请求的节奏、突发的大小最终由你怎么驱动它决定——失败后不要立即重跑、把大任务拆小、关注出口 IP 而不是浏览器数量、脚本化运行时给它预算和退避。五、能不能给 browser-use 换上 stealth Firefox不能直接说清楚比给你一个不成立的变通方案好。browser-use 通过Chrome DevTools ProtocolCDP驱动浏览器——配置甚至暴露了cdp_url用于连接一个正在运行的浏览器——而它的executable_path与channel处理只认 Chromium。把 Firefox 二进制塞进executable_path不是即插即用驱动方会对着一个它不实现的协议说话。5.1 真正接受不同引擎的路线是 MCP接受不同引擎的路线是MCP在那里浏览器是一组工具而不是一个 CDP 端点。Microsoft 的 Playwright MCP 服务器接受--browserfirefox原文档作者于 2026-09-03 核对而 本仓库的 MCP 服务器 走得更远它内置一个在 C 层面打过补丁的 Firefox 作为引擎指纹设置在引擎自身的源码里而不是贴在页面上的补丁。一个会说 MCP 的助手——Claude Code、Claude Desktop、Cursor——驱动的是一个指纹来自其自身源码的浏览器。这正是本仓库invisible_playwright_mcp的形态几个与浏览器-use 直接对照的事实仓库在pyproject.toml中声明支持 Windows 与 Linux无 macOS引擎只随这两者发布二进制uvx invisible-playwright-mcp无子命令就是 MCP 服务器本体python -m invisible_playwright_mcp是接口 spawn 的方式invisible-playwright-mcp ui是带界面的独立用法见 README身份由STEALTHFOX_SEED决定、出口由STEALTHFOX_PROXY决定、登录持久化由STEALTHFOX_PROFILE_DIR决定三者都是可选环境变量工具调用可以覆盖它们见 plan.py 的三值解析逻辑 与 服务器实现默认走 stdio 传输STEALTHFOX_MCP_TRANSPORThttp可切换为 streamable HTTP默认绑定127.0.0.1端口默认8766。5.2 公平地陈述这个权衡转去 MCP 意味着离开 browser-use 的 agent 循环改用支持 MCP 的 agent。这个权衡哪边更重取决于你的拦截来自哪里——用上面首次加载 vs 交互之后的测试就能判断如果拦截是机器形态的首次加载就被拦引擎才是关键而 MCP 是通往不同引擎的门如果拦截是节奏形态或流量形态的交互后被拦换任何引擎都救不了你——在 browser-use 里如此在任何地方都如此。六、结论三堆问题一个诊断browser-use 暴露的配置足以修复配置能修复的两件事跑哪个浏览器二进制以及 profile 有没有过去。指向真实 Chrome、用有历史的 profile你就拿走了全部可得的收益。其余的一切分成两堆机器级 tell与所有自动化工具共享靠换机器或换引擎解决——两者都不是 browser-use 的设置而且换引擎的路线走 MCP不走executable_pathagent 节奏与流量 tellagent 特有任何指纹工作都修不了。一个观察——拦截什么时候到来——就能告诉你自己属于哪一堆。七、常见问题速答为什么我的 browser-use 代理在服务器上被拦、本地却没事因为服务器没有 GPU、字体很少、没有音频设备、屏幕是默认分辨率而代理在两个地方完全一样。变的是机器不是代码。我能在 browser-use 里设置自定义浏览器吗能BrowserProfile的executable_path它期望 Chromium 家族二进制。指向你真实安装的 Chrome 而不是捆绑的 Chromium 是值得做的。我能在 browser-use 里用 stealth Firefox 吗不能。它走 CDP 驱动浏览器处理只认 Chromium。接受不同引擎的路线是 MCP配合一个不同的 agent。持久化 profile 有用吗有用比大多数设置都有用因为它是唯一能给浏览器一段历史的设置。先读清楚它的陷阱锁死、身份一致性再动手。为什么拦截在几次动作之后才来而不是立刻那指向行为或流量而不是指纹agent 的节奏和它的重试流量都只在它开始行动后才可见。加代理能解决吗它只改变你来自哪里仅此而已。如果浏览器正在通过 GPU、字体和屏幕宣告自己是一台服务器那地址从来就不是问题所在。八、仓库证据与延伸阅读本文涉及的本仓库证据与可继续深入的材料MCP 服务器文档各客户端的配置块mcpServers/context_servers/servers/ TOML、STEALTHFOX_*环境变量表、全部工具与main/support双浏览器模型AI 代理发出的时序信号节奏信号的完整解剖以及变化、且依赖步骤的停顿建议代理重试循环与速率限制流量那一半的信号含带退避的脚本示例为什么我的 AI 代理会被拦四层模型的完整地图与检查顺序browser-use 的替代方案更广的替代格局与诚实的对比源码实现plan.pyseed/profile/proxy/headless 的三值解析、server.pystdio 与 HTTP 传输、默认端口 8766、agent.py系统提示词、8,192 token 上限、无回合上限的循环README.md两种使用方式MCP 接入与独立 UI、--proxy/--seed/--profile-dir/--headed/--binary等 CLI 选项以及.env的优先级--flag 环境变量 .env 默认值。本文源自 browser-use getting blocked 一文其内容撰写于维护invisible_playwright_mcp的过程中——这个仓库运行在文中描述的补丁级 Firefox 引擎之上。文章明确说明该引擎不适合 browser-use因为它确实不适合一份声称可以的技术指南只会浪费你的时间。赞分享人工智能AI Agent浏览器控制GUI 自动化MCP 服务【免费下载链接】invisible_playwright_mcpPlaywright 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点击查看免费下载相关推荐为什么你的广告拦截器总被发现终极解决方案来了为什么你的广告拦截器总被发现终极解决方案来了 Anti Adblock Killer是一款强大的工具能帮助你在访问要求禁用广告拦截器的网站时继续保持广告拦前端网络安全Dozzle Cloud 数据边界指南什么数据离开你的主机、如何拦截以及云端的存储与删除Dozzle Cloud 数据边界指南什么数据离开你的主机、如何拦截以及云端的存储与删除 Dozzle 自托管实例通过 出站连接 与 Dozzle Cloud可观测性日志分析后端运维jev-ultrafast做不到什么浏览器Agent的能力边界、已知限制与路线图清单jev ultrafast做不到什么浏览器Agent的能力边界、已知限制与路线图清单 jev ultrafast 是目前速度最快、成本最低档的开源浏览器AgeAI Agent浏览器控制人工智能AI 应用上一篇pgsync部署指南在Docker环境中快速配置PostgreSQL数据同步下一篇一键网页转应用终极指南用Pake快速构建轻量级桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考