ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI助手配 TaoToken 与 Browserless:Playwright 网页自动化 config.toml 骨架

AI助手配 TaoToken 与 Browserless:Playwright 网页自动化 config.toml 骨架 1. 从一次抓取失败说起AI 助手为什么需要 Browserless 与 Playwright如果你正在用 AI 助手做网页自动化大概率遇到过这种场景让助手去抓一个商品列表页返回的却是「请开启 JavaScript」或者一堆空标签。原因不复杂——大多数 AI 助手自带的 HTTP 请求工具只能拿到服务端渲染的 HTML遇到 Vue、React 这类前端渲染的页面就束手无策。这时候需要的是一个真正能跑浏览器的执行环境而 Browserless 加 Playwright 就是目前比较省心的组合。Playwright 是微软开源的浏览器自动化框架它能通过 CDP 协议直接指挥 Chromium 做点击、填表、截图、取文本这些动作并且自带自动等待机制元素没就绪不会硬点。Browserless 则把浏览器运行环境打包成 Docker 镜像对外暴露一个 WebSocket 地址Playwright 连上去就能操作远端浏览器不用在每台机器上装一堆图形依赖。两者配合AI 助手就相当于有了一个随时可用的云端浏览器。这篇内容面向的是已经在 Docker 里跑 AI 助手比如 OpenClaw 这类容器化智能体的开发者重点不是讲原理而是给出一份可以直接复制的config.toml骨架和settings.json关键字段再演示一次真实的抓取验证确认从 TaoToken 统一通道到 Browserless 浏览器服务的整条链路是通的。适合谁手上有 Docker 环境、想让 AI 助手具备动态网页处理能力、又不想自己维护浏览器集群的人。2. TaoToken 前置统一 Key 与 API 通道的定位在配置 Browserless 之前先理清 TaoToken 在这套架构里的角色。AI 助手要调用模型做决策比如判断页面结构、生成选择器这部分请求需要走一个稳定的 API 通道。TaoToken 提供的就是这个统一入口一个 Key 同时对接多家模型base_url 固定不用在配置文件里来回切换供应商地址。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点统一为 https://taotoken.net/api 。你需要在控制台创建一个 API Key后面写进settings.json的api_key字段。这一步不用展开讲注册流程重点记住两件事Key 只创建一次所有模型调用共用base_url 不要带多余路径SDK 会自动拼接/v1/chat/completions这类后缀。对于长期跑编码任务或 Agent 循环的场景可以考虑 Coding Plan它在并发和额度上更适合持续调用。如果只是验证模型连通性用模型对话页面手动发一条消息就能确认 Key 是否生效。接入文档里有各语言 SDK 的示例排障时对照着看比较快。3. 可复制配置config.toml 骨架与 settings.json 关键字段下面这份config.toml是 AI 助手侧的骨架放在容器内助手的工作目录下具体路径看你的镜像约定常见是/app/config.toml或~/.config/assistant/config.toml。字段分三块模型通道、浏览器服务、抓取行为。# config.toml - AI 助手网页自动化配置骨架 [llm] # TaoToken 统一通道 provider openai-compatible base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY # 从环境变量读取避免明文 model gpt-4o-mini # 按需替换 timeout_seconds 60 max_retries 3 [browser] # Browserless 服务地址Docker 内网或宿主机映射 ws_endpoint ws://browserless:3000 connect_timeout_ms 15000 default_context isolated # 每个任务独立上下文隔离 Cookie [browser.launch_options] headless true args [--no-sandbox, --disable-dev-shm-usage] [scrape] wait_until networkidle # 等网络空闲再取内容 selector_timeout_ms 20000 screenshot_on_error true output_dir /data/scrape_output对应的settings.json是助手运行时的字段映射重点看这几个键{ llm: { base_url: https://taotoken.net/api, api_key: ${TAOTOKEN_API_KEY}, model: gpt-4o-mini }, browser: { ws_endpoint: ws://browserless:3000, context_mode: isolated, headless: true }, scrape: { wait_until: networkidle, selector_timeout_ms: 20000 } }注意ws_endpoint里的主机名browserless是 Docker Compose 网络里的服务名。如果你用docker run单独起容器宿主机访问要写ws://127.0.0.1:3000容器内互访则用容器名或自定义网络别名。环境变量这样注入避免 Key 写死在文件里export TAOTOKEN_API_KEYsk-你的KeyBrowserless 容器启动命令保持和之前一致端口映射到 3000docker run -d --name browserless -p 3000:3000 browserless/chrome:latest如果你用的是 Compose把两个服务放同一个 network 下助手容器就能直接用服务名browserless访问不用走宿主机 IP。4. 验证请求一次抓取确认通道与浏览器服务连通配置写完后先别急着跑复杂任务用一段最小脚本验证两件事TaoToken 通道能返回模型响应Browserless 能启动浏览器并取到页面标题。// verify.mjs import { chromium } from playwright; const WS process.env.BROWSER_WS || ws://127.0.0.1:3000; const browser await chromium.connectOverCDP(WS); const context await browser.newContext(); const page await context.newPage(); await page.goto(https://example.com, { waitUntil: networkidle }); const title await page.title(); console.log(页面标题:, title); await context.close(); await browser.close();运行node verify.mjs预期输出类似页面标题: Example Domain。如果这一步成功说明 Playwright 已经通过 WebSocket 连上了 Browserless 的浏览器实例抓取链路是通的。接着验证 TaoToken 通道用 curl 发一条最小请求curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: 回复 OK}] }返回 JSON 里choices[0].message.content有内容就说明 Key 和 base_url 都正确。两个验证都过了AI 助手就能在任务里先调模型分析页面结构再调 Playwright 执行抓取。5. 本篇常见错排查连接被拒、超时与选择器失效连接被拒ECONNREFUSED最常见的原因是ws_endpoint写错。容器内互访要用 Docker 网络里的服务名不是localhost。用docker network inspect确认两个容器在同一网络。另外 Browserless 默认端口是 3000映射时别写成别的。Chromium 启动超时Browserless 镜像首次启动会初始化浏览器环境如果宿主机内存不足低于 1GB 可用启动会卡住。给容器加--shm-size1g参数并在launch_options.args里保留--disable-dev-shm-usage。选择器超时但页面明明有元素多半是wait_until设成了load而页面内容是异步渲染的。改成networkidle或者显式page.waitForSelector。如果目标站点有反爬检查是否需要在newContext里设置userAgent和viewport。TaoToken 返回 401检查环境变量是否真的注入到容器里docker exec进去echo $TAOTOKEN_API_KEY看一眼。另外 base_url 不要写成https://taotoken.net/api/v1SDK 会自己拼/v1重复了会 404。抓取结果为空字符串有些页面文本在 iframe 或 shadow DOM 里page.textContent取不到。用page.frameLocator或evaluate穿透。截图存到output_dir里对照看比盲猜快。6. 后续怎么用从验证到日常任务链路通了之后日常任务可以这样组织AI 助手先通过 TaoToken 通道让模型读一段页面 HTML 片段生成 CSS 选择器再把选择器传给 Playwright 脚本执行抓取结果写回文件或数据库。整个过程中 Browserless 负责浏览器生命周期你不需要在助手容器里装 Chromium。如果任务量大、需要长时间跑 Agent 循环建议把模型调用切到 Coding Plan避免单 Key 限流影响抓取节奏。接入文档里有并发控制和重试的配置示例排障时优先看那里。模型对话页面适合快速验证某个模型是否可用不用改代码。最后提醒一句Browserless 容器不是常驻就万事大吉定期docker logs browserless看有没有内存溢出或浏览器崩溃记录。我试过连续跑两天不重启上下文泄漏会导致新连接变慢加个定时重启策略会稳很多。
返回列表