为什么选 OpenClaw + Playwright?

传统爬虫工具(requests、Scrapy、BeautifulSoup)擅长处理静态 HTML,但面对 SPA(单页应用)、动态渲染、AJAX 懒加载、无限滚动等现代前端页面时往往束手无策。OpenClaw 内置浏览器自动化能力,底层借助 Playwright 驱动真实浏览器(Chromium/Firefox/WebKit),配合 AI 的智能理解能力,可以:

  • 渲染 JavaScript — 完整执行页面 JS,拿到最终 DOM,不再为 CSR/SSR 差异烦恼
  • AI 智能提取 — 不写 CSS 选择器,用自然语言描述你想要的数据,AI 自动定位和提取
  • 模拟交互 — 点击、滚动、填表、登录,像真人一样操作浏览器
  • 反爬绕过 — 真实浏览器指纹 + 随机化行为,比 headless 检测更难被识别
  • 多渠道输出 — 爬取结果直接推送到 Telegram、微信、飞书,或存入本地文件
  • 定时任务 — 通过 cron 配置定期爬取,实现数据监控
适用场景:动态渲染页面的数据采集、竞品价格监控、新闻聚合、社交媒体内容抓取、自动化测试数据收集、定时报表生成等。

架构总览

OpenClaw + Playwright 爬取方案的整体架构如下:

┌─────────────────────────────────────────────────────────────┐ │ 你(用户/调度器) │ │ "帮我爬取 xxx 网站的商品价格" / cron 定时触发 │ └──────────────────────┬──────────────────────────────────────┘ │ 自然语言指令 ▼ ┌─────────────────────────────────────────────────────────────┐ │ OpenClaw Gateway │ │ 接收指令 → 路由到 AI Agent → 调用 Skills/Tools │ └──────────────────────┬──────────────────────────────────────┘ │ 调用 browser.act / browser.navigate ▼ ┌─────────────────────────────────────────────────────────────┐ │ Playwright (Browser Engine) │ │ Chromium / Firefox / WebKit │ │ ┌─────────┐ ┌──────────┐ ┌────────────┐ │ │ │ 页面导航 │ │ DOM 操作 │ │ 网络拦截 │ │ │ │ 截图录屏 │ │ 事件模拟 │ │ Cookie管理 │ │ │ └─────────┘ └──────────┘ └────────────┘ │ └──────────────────────┬──────────────────────────────────────┘ │ 渲染后的 HTML / 截图 / 提取数据 ▼ ┌─────────────────────────────────────────────────────────────┐ │ AI Agent 处理层 │ │ 结构化提取 → 数据清洗 → 格式化输出 │ └──────────────────────┬──────────────────────────────────────┘ │ 推送结果 ▼ ┌─────────────────────────────────────────────────────────────┐ │ 输出渠道(飞书 / Telegram / 文件 / API) │ └─────────────────────────────────────────────────────────────┘

环境搭建(分步指南)

步骤 1 安装 OpenClaw 并完成初始化

确保已安装 Node.js ≥ 22,然后全局安装 OpenClaw 并运行引导向导:
npm install -g openclaw@latest
openclaw onboard --install-daemon
向导会引导你完成 Gateway、工作区、AI 模型等基础配置。如果你已经安装过,运行 openclaw update --channel stable 确保是最新版本。

步骤 2 启用浏览器自动化

openclaw.json 配置文件中启用 browser 模块:
// openclaw.json 中添加或确认以下配置 { "browser": { "enabled": true, "headless": true, "timeout": 30000, "viewport": { "width": 1280, "height": 800 } } }
提示:设置 "headless": false 可以在调试时看到浏览器的实际操作过程,生产环境建议设为 true

步骤 3 安装 Playwright 浏览器引擎

OpenClaw 的浏览器自动化依赖 Playwright,需要下载浏览器二进制文件:
# 安装 Playwright 及 Chromium 浏览器
npx playwright install chromium

# 如果需要其他浏览器
npx playwright install firefox
npx playwright install webkit

# 安装系统依赖(Linux 环境)
npx playwright install-deps
注意:Windows 用户建议在 WSL2 环境下运行。macOS 和 Linux 可直接使用。首次下载浏览器约 150-300MB,请确保网络通畅。

步骤 4 安装浏览器自动化 Skills(可选但推荐)

OpenClaw 的 Skills 商店提供了专门的浏览器自动化技能包:
# 搜索可用的浏览器相关 Skills
openclaw skill search browser

# 安装推荐的浏览器自动化 Skill
openclaw skill install @anthropic/browser-automation

# 安装网页爬取专用 Skill
openclaw skill install @community/web-scraper

步骤 5 启动 Gateway 并验证

启动 OpenClaw Gateway 服务并验证浏览器功能是否正常:
# 启动 Gateway
openclaw gateway --port 18789 --verbose

# 发送测试消息,让 AI 访问一个网页
openclaw agent --message "请访问 https://example.com 并告诉我页面标题" --thinking high
如果 AI 能正确返回页面标题,说明浏览器自动化配置成功。

实战场景

场景一:基础页面抓取

示例 1 抓取动态渲染的新闻列表

很多新闻网站使用前端框架(React/Vue)渲染内容,直接请求 HTML 拿不到数据。用 OpenClaw 可以这样做:
# 通过自然语言指令爬取
openclaw agent --message "
访问 https://news.example.com,
等待页面完全加载后,
提取所有新闻标题和链接,
以 JSON 格式输出
" --thinking high
AI 会自动:①打开浏览器 → ②导航到目标页面 → ③等待 JS 渲染完成 → ④定位新闻元素 → ⑤提取并格式化数据。

示例 2 无限滚动页面的数据采集

社交媒体、电商列表等常用无限滚动加载更多内容:
openclaw agent --message "
访问 https://shop.example.com/products,
向下滚动 5 次,每次等待 2 秒让新内容加载,
提取所有商品的名称、价格和图片链接,
输出为 CSV 格式
" --thinking high
技巧:指定滚动次数而不是"滚动到底部"可以避免页面内容过多导致内存溢出。

示例 3 需要登录的页面抓取

某些数据位于登录墙后面,OpenClaw + Playwright 可以模拟登录:
openclaw agent --message "
1. 访问 https://dashboard.example.com/login
2. 在用户名输入框填入 myuser@example.com
3. 在密码输入框填入 mypassword123
4. 点击登录按钮
5. 等待跳转到仪表盘页面
6. 提取本月的销售数据汇总
" --thinking high
安全警告:不要将明文密码写在消息中。推荐使用环境变量 $DASHBOARD_PASSWORD 或 OpenClaw 的 secret 管理功能存储敏感凭据。

场景二:高级爬取技巧

示例 4 截图 + OCR 提取图片中的文字

有些网站将关键信息渲染为图片(如验证码、图表数据):
openclaw agent --message "
访问 https://report.example.com/chart,
等待图表加载完成,
对图表区域截图,
分析截图中的数据趋势并总结
" --thinking high
OpenClaw 的多模态能力可以直接理解截图内容,无需额外 OCR 工具。

示例 5 多页面批量爬取

爬取多个分页或多个不同 URL 的数据:
openclaw agent --message "
依次访问以下网页,提取每个页面的文章标题和摘要:
- https://blog.example.com/page/1
- https://blog.example.com/page/2
- https://blog.example.com/page/3
- https://blog.example.com/page/4
- https://blog.example.com/page/5
合并所有结果,按发布日期排序输出
" --thinking high

示例 6 拦截网络请求获取 API 数据

很多 SPA 页面的数据来自后端 API,直接拦截 XHR/Fetch 请求比解析 DOM 更可靠:
openclaw agent --message "
访问 https://app.example.com/dashboard,
监听所有发往 /api/ 路径的网络请求,
捕获响应数据中的 JSON,
提取其中 'metrics' 字段的内容
" --thinking high
原理:Playwright 支持 page.route() 拦截网络请求,OpenClaw 的 browser.act 底层利用了这一能力。这比解析渲染后的 DOM 更稳定,不受页面样式变化影响。

场景三:定时爬取与数据监控

示例 7 定时价格监控 + 飞书通知

配置 cron 任务实现定时爬取,价格变动时推送通知:
// openclaw.json 中配置定时任务 { "cron": [ { "name": "price-monitor", "schedule": "0 */6 * * *", "message": "访问 https://shop.example.com/product/12345,提取当前价格。如果价格低于 500 元,通过飞书通知我。", "thinking": "high" } ] }
这样每 6 小时自动检查一次商品价格,降价时立即收到飞书消息。

示例 8 竞品内容变更监控

监控竞品网站的内容变更,检测到更新时汇报差异:
openclaw agent --message "
1. 访问 https://competitor.example.com/pricing
2. 提取所有套餐名称和价格
3. 与上次爬取的结果对比
4. 如果有变化,列出变更详情
5. 将结果发送到 Telegram
" --thinking high
配合 OpenClaw 的 memory 功能,AI 可以记住上次的爬取结果,自动做对比。

反爬应对策略

现代网站通常有多层反爬机制,以下是使用 OpenClaw + Playwright 时的应对策略:

策略 1 User-Agent 和浏览器指纹

Playwright 默认使用真实浏览器引擎,指纹比 requests 自然得多。额外加固:
// openclaw.json browser 配置 { "browser": { "enabled": true, "args": [ "--disable-blink-features=AutomationControlled" ], "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..." } }
提示:Playwright 的 Chromium 默认会被 navigator.webdriver 检测。加上 --disable-blink-features=AutomationControlled 参数可以绕过大部分基础检测。

策略 2 请求频率控制

不要暴力爬取,合理控制请求间隔:
# 在指令中明确要求延迟
openclaw agent --message "
访问以下 10 个商品页面,
每个页面之间等待 3-5 秒的随机间隔,
提取商品名称和价格
" --thinking high
建议的频率上限:
- 同一域名:每次请求间隔 ≥ 2 秒
- 批量爬取:每小时不超过 200 个页面
- 高风险站点:每次请求间隔 ≥ 5 秒

策略 3 代理 IP 轮换

对于 IP 频率限制严格的站点,可以配置代理:
// openclaw.json 中配置代理 { "browser": { "proxy": { "server": "http://proxy.example.com:8080", "username": "user", "password": "pass" } } }

策略 4 验证码处理

遇到验证码时的几种处理方案:
方案 A — AI 视觉识别:OpenClaw 的多模态能力可以直接识别简单的图形验证码和滑块验证码。
方案 B — 手动介入:设置 "headless": false,验证码出现时让你手动完成,之后 AI 继续操作。
方案 C — Cookie 复用:手动登录一次后导出 Cookie,配置 OpenClaw 复用 Cookie 跳过验证。
注意:使用第三方打码平台存在法律和安全风险,不推荐使用。

策略 5 Cloudflare / WAF 绕过

Cloudflare 等 WAF 防护是最常见的阻碍:
- 等待 Challenge 完成:Playwright 会自动等待 Cloudflare 5 秒盾通过
- 保持 Session:使用持久化浏览器上下文,避免每次新开浏览器触发 Challenge
- stealth 插件:社区提供了 playwright-extra + stealth 插件来隐藏自动化特征
法律提醒:绕过网站安全防护可能违反目标网站的服务条款甚至相关法律法规。请确保你的爬取行为合法合规,遵守 robots.txt 和网站 ToS。

最佳实践与优化建议

实践 1 优先使用 API 而非爬取页面

如果目标网站提供公开 API,优先使用 API 获取数据。API 更稳定、更快速、对服务器负担更小。只有在没有 API 或 API 数据不完整时才使用浏览器爬取。

实践 2 缓存与去重

避免重复爬取相同内容:
- 利用 OpenClaw 的 memory 功能记录已爬取的 URL
- 对比内容哈希值判断是否有更新
- 设置合理的缓存过期时间

实践 3 错误处理与重试

网络环境不稳定时要做好容错:
# 在指令中要求错误处理
openclaw agent --message "
访问以下 URL 列表,如果某个页面加载失败,
跳过并记录失败的 URL,继续处理下一个。
最后输出成功和失败的汇总。
" --thinking high

实践 4 资源消耗优化

浏览器爬取比纯 HTTP 请求消耗更多资源,优化建议:
- 拦截不需要的资源:屏蔽图片、字体、视频等不需要的资源类型,减少带宽和加载时间
- 限制并发数:同时打开的页面不超过 3-5 个
- 及时关闭页面:数据提取完成后立即关闭浏览器标签页
- 使用 headless 模式:无头模式比有头模式节省约 30% 内存

实践 5 遵守爬虫道德


- 遵守目标网站的 robots.txt 规则
- 控制爬取频率,不要对目标服务器造成过大压力
- 不爬取个人隐私数据(手机号、邮箱、身份信息等)
- 爬取的数据仅用于合法用途
- 在合理范围内设置 User-Agent,标明爬虫身份

常见问题与解决方案(50 个)

以下问题按类别整理,涵盖环境配置、浏览器运行、页面交互、反爬对抗、数据提取、性能优化等方面。

一、环境与安装 (10 个)

#1 Playwright 浏览器下载失败

Failed to download chromium - connect ETIMEDOUT
国内网络下载 Playwright 浏览器二进制文件经常超时。解决方法:
1. 设置镜像源:PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright npx playwright install chromium
2. 使用代理:HTTPS_PROXY=http://127.0.0.1:7890 npx playwright install chromium
3. 手动下载浏览器文件放到 ~/.cache/ms-playwright/ 目录

#2 缺少系统依赖(Linux)

error while loading shared libraries: libnss3.so: cannot open shared object file
Linux 环境下 Chromium 需要一些系统库。运行 npx playwright install-deps 自动安装,或手动安装:
sudo apt-get install -y libnss3 libatk-bridge2.0-0 libdrm2 libxkbcommon0 libgbm1

#3 WSL2 下浏览器无法启动

browserType.launch: Executable doesn't exist at /home/user/.cache/ms-playwright/chromium-xxx/chrome-linux/chrome
WSL2 中需要额外安装 GUI 支持:
1. 确保 WSL2 版本 ≥ 0.67(支持 WSLg)
2. 运行 wsl --update 更新 WSL
3. 如果仍不行,安装 xvfbsudo apt install xvfb && xvfb-run npx playwright install chromium

#4 OpenClaw browser 配置不生效

browser.act: Browser control service not available
确认 openclaw.json"browser": { "enabled": true } 已正确配置。修改配置后需要重启 Gateway:openclaw gateway restart。也可运行 openclaw doctor 检查配置状态。

#5 Playwright 版本不兼容

Browser was connected, but version mismatch: expected 1.xx but got 1.yy
OpenClaw 内置的 Playwright 版本需要与本地安装的浏览器二进制文件匹配。运行 npx playwright install 重新下载匹配的浏览器。

#6 磁盘空间不足

ENOSPC: no space left on device
每个浏览器引擎约 150-300MB。清理旧版本:npx playwright uninstall --all && npx playwright install chromium。建议只安装需要的浏览器(通常 Chromium 足够)。

#7 Docker 容器中运行失败

Failed to launch browser: chrome crashed
Docker 容器默认缺少运行浏览器所需的权限和依赖。解决方法:
1. 使用官方 Playwright Docker 镜像:mcr.microsoft.com/playwright:v1.xx.0-jammy
2. 添加 --cap-add=SYS_ADMIN 或使用 --security-opt seccomp=unconfined
3. 设置 --ipc=host 避免共享内存不足

#8 Node.js 版本过低

SyntaxError: Unexpected token '??' — Node.js 16 detected, minimum required: 22
OpenClaw 要求 Node.js ≥ 22。使用 nvm 管理版本:nvm install 22 && nvm use 22

#9 权限不足无法安装全局包

EACCES: permission denied, mkdir '/usr/local/lib/node_modules/openclaw'
不要使用 sudo npm install -g。推荐修改 npm 全局目录:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH

#10 pnpm/bun 环境下 Playwright 找不到浏览器

browserType.launch: Executable doesn't exist
使用 pnpm 或 bun 时,Playwright 浏览器路径可能不同。解决方法:
1. 设置环境变量:export PLAYWRIGHT_BROWSERS_PATH=~/.cache/ms-playwright
2. 确保用 npx playwright install(而非 pnpx)安装浏览器

二、浏览器运行问题 (10 个)

#11 浏览器启动超时

browserType.launch: Timeout 30000ms exceeded while waiting for browser to start
可能原因:系统资源不足或浏览器进程被阻塞。解决方法:
1. 增加超时:在 openclaw.json 中设置 "timeout": 60000
2. 检查系统内存:free -h(Linux)或任务管理器(Windows)
3. 关闭不必要的进程释放资源

#12 页面加载后白屏 / 内容为空

AI 返回 "页面内容为空" 或 "未找到相关内容"
页面可能需要等待 JS 渲染完成。在指令中添加等待条件:
- "等待页面中出现包含'加载完成'的元素后再提取"
- "等待 networkidle 状态后再提取"
- "等待 5 秒后再提取内容"

#13 内存占用过高 / OOM Killed

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
每个浏览器标签页约占 50-200MB 内存。解决方法:
1. 减少同时打开的标签页数量
2. 爬完一页及时关闭:在指令中说明"提取完成后关闭页面"
3. 拦截不需要的资源(图片、视频、字体)
4. 增加 Node.js 内存限制:NODE_OPTIONS=--max-old-space-size=4096

#14 浏览器崩溃(Crash)

page.goto: Target page, context or browser has been closed
浏览器崩溃通常由内存不足或页面过于复杂引起。
1. 检查系统可用内存
2. 避免同时打开大量标签页
3. 对于特别重的页面,尝试使用 Firefox(内存管理优于 Chromium)

#15 headless 模式下网站行为不同

网站在 headless 模式下返回不同内容或直接跳转到验证页面
部分网站检测 headless 模式。解决方法:
1. 添加启动参数:"args": ["--disable-blink-features=AutomationControlled"]
2. 设置合理的 viewport 和 User-Agent
3. 调试时设 "headless": false 对比有头/无头模式差异

#16 SSL 证书错误

net::ERR_CERT_AUTHORITY_INVALID
目标网站使用自签名证书或证书过期。在 browser 配置中添加:"ignoreHTTPSErrors": true
注意:这会忽略所有 HTTPS 错误,仅在开发/测试环境使用。

#17 弹窗 / 对话框阻塞

页面弹出 alert/confirm/prompt 后 AI 操作卡住
Playwright 默认不处理 JavaScript 对话框。在指令中说明:"如果出现弹窗,自动点击确认/关闭"。OpenClaw 的 browser.act 通常能自动处理常见弹窗。

#18 iframe 内的内容无法提取

AI 说 "页面上没有找到相关内容",但内容实际在 iframe 中
iframe 中的内容需要切换上下文才能访问。在指令中明确指出:"内容在 iframe 中,请切换到 iframe 内提取数据"。Playwright 支持通过 frame.locator() 访问 iframe 内容。

#19 浏览器进程残留

多个 chrome/chromium 进程占满 CPU 和内存
OpenClaw 异常退出时可能留下僵尸浏览器进程。
- Linux/macOS:pkill -f chromiumpkill -f chrome
- Windows(WSL2):taskkill /F /IM chrome.exe
建议配置 Gateway 的 graceful shutdown 确保浏览器正常关闭。

#20 GPU 加速相关报错

[GPU] Failed to create channel / GPU process isn't usable
服务器或 WSL2 环境通常没有 GPU。添加启动参数禁用 GPU 加速: "args": ["--disable-gpu", "--disable-software-rasterizer"]。这不影响网页爬取功能。

三、页面交互问题 (10 个)

#21 元素找不到 / 选择器失效

waiting for locator('button.submit-btn') — element not found
网站改版后选择器会失效。OpenClaw 的优势是可以用自然语言描述元素,不依赖固定选择器。将指令改为描述性语言:"点击页面上的'提交'按钮"而不是指定 CSS 选择器。

#22 点击被遮挡 / 不可点击

element is not visible or is covered by another element
可能有弹出层、Cookie 提示或广告覆盖了目标元素。在指令中添加:"先关闭所有弹窗和 Cookie 提示,然后再点击目标按钮"。

#23 滚动加载内容不出来

滚动后页面没有加载新内容
可能原因:①网站使用虚拟滚动(只渲染可见区域);②需要滚动到特定元素触发加载;③网络延迟导致加载慢。
解决方法:在指令中明确"每次滚动后等待 3 秒"或"滚动直到'加载更多'按钮出现,然后点击它"。

#24 表单自动填充被阻止

Input 填入内容后提交时显示"请填写此字段"
有些表单检测键盘输入事件而非 value 属性。在指令中要求"逐字输入而非直接设置值",或者"清空输入框后逐字母键入内容"。Playwright 的 type() 方法会模拟真实键入。

#25 下拉菜单无法选择

无法选择 select/dropdown 中的选项
现代 UI 框架常用自定义下拉组件而非原生 <select>。在指令中描述操作流程:"点击下拉框展开选项,然后点击'选项名称'"。

#26 文件上传失败

无法通过浏览器上传文件
Playwright 支持文件上传:page.setInputFiles('input[type=file]', 'path/to/file')。在 OpenClaw 指令中描述:"找到文件上传按钮,上传 /tmp/data.csv 文件"。注意文件路径需要是 Gateway 所在机器的本地路径。

#27 新窗口 / 新标签页导航丢失

点击链接后打开了新窗口,AI 失去了对新窗口的控制
Playwright 可以监听新页面事件。在指令中说明:"点击链接,如果打开新标签页,切换到新标签页继续操作"。

#28 拖拽操作失败

无法完成滑块验证码或拖拽排序
拖拽操作需要精确的鼠标事件模拟。Playwright 支持 page.mouse.move()page.dragAndDrop()。在指令中详细描述拖拽的起点和终点。

#29 页面跳转后 Cookie 丢失

登录后跳转到其他页面时变成未登录状态
确保使用同一个浏览器上下文(BrowserContext)进行所有操作。OpenClaw 默认会保持上下文一致。如果问题持续,尝试在 browser 配置中开启持久化存储: "persistentContext": true

#30 Shadow DOM 内容无法访问

AI 无法提取 Web Components / Shadow DOM 中的内容
Playwright 默认可以穿透 Shadow DOM。如果仍然无法访问,在指令中提示:"目标内容在 Shadow DOM 中,请使用 piercing 选择器访问"。Playwright 的 locator() 默认支持 Shadow DOM 穿透。

四、反爬与封禁 (10 个)

#31 IP 被封禁(403 Forbidden)

HTTP 403 Forbidden / Access Denied
爬取频率过高被目标网站封 IP。解决方法:
1. 降低爬取频率(间隔 ≥ 5 秒)
2. 配置代理 IP 轮换
3. 更换网络出口 IP
4. 等待封禁自动解除(通常 24-48 小时)

#32 Cloudflare 5 秒盾拦截

页面一直卡在 "Checking your browser..." / "Just a moment..."
Cloudflare 的 JavaScript Challenge 需要等待 5-10 秒。
1. 在指令中说明"等待 Cloudflare 验证通过后再操作"
2. 使用持久化浏览器上下文复用 Challenge 通过后的 Cookie
3. 设置 networkidle 等待策略

#33 reCAPTCHA / hCaptcha 验证码

页面弹出 Google reCAPTCHA 或 hCaptcha 验证
这类验证码难以自动绕过。建议方案:
1. 切换到 headless: false,手动完成验证后继续
2. 使用已验证的 Cookie/Session
3. 降低爬取频率以减少验证码触发概率
4. 检查是否有不需要验证的 API 端点

#34 navigator.webdriver 检测

网站检测到自动化浏览器并拒绝服务
Playwright 默认设置 navigator.webdriver = true。解决方法:
1. 使用 --disable-blink-features=AutomationControlled 启动参数
2. 在页面加载前注入脚本覆盖 navigator.webdriver
3. 使用 playwright-extra + stealth 插件

#35 请求频率限制(429 Too Many Requests)

HTTP 429 Too Many Requests / Rate limit exceeded
触发了目标网站的频率限制。
1. 增加请求间隔到 5-10 秒
2. 实现指数退避:失败后加倍等待时间
3. 分散到不同时间段爬取
4. 检查响应头中的 Retry-After

#36 蜜罐链接/陷阱

爬虫被引导到隐藏链接导致大量无效请求或封禁
有些网站放置不可见的隐藏链接(蜜罐),爬虫访问后立即被封禁。在指令中要求"只点击可见的、用户可交互的链接",利用 Playwright 的可见性检查避免踩坑。

#37 被重定向到登录页面

每次访问都被 302 重定向到登录页
目标页面需要登录。解决方法:
1. 先执行登录流程再爬取数据
2. 导出已登录的 Cookie 文件,配置 OpenClaw 自动加载
3. 使用 storageState 保存和恢复浏览器状态

#38 指纹检测 — Canvas/WebGL 指纹

网站通过 Canvas 或 WebGL 指纹识别爬虫
高级反爬会收集浏览器指纹。Playwright 的真实浏览器本身指纹比较自然,额外加固可以:
1. 随机化 viewport 尺寸
2. 设置不同的 locale 和 timezone
3. 使用 stealth 插件覆盖指纹特征

#39 网站返回假数据/混淆数据

爬到的数据与页面上看到的不一致
部分网站对疑似爬虫返回错误数据。验证方法:
1. 用 headless: false 对比真实显示和爬取结果
2. 截图与提取数据交叉验证
3. 使用 AI 的视觉能力直接从截图中读取数据

#40 robots.txt 禁止访问

目标路径在 robots.txt 中被 Disallow
Playwright 不会自动遵守 robots.txt,但作为负责任的爬虫使用者你应该遵守。
1. 先检查 https://目标域名/robots.txt
2. 对 Disallow 的路径考虑使用网站提供的 API 替代
3. 联系网站管理员申请爬取授权

五、数据提取与处理 (10 个)

#41 AI 提取的数据不准确

AI 提取的数据有遗漏或错误
AI 智能提取依赖模型的理解能力。提高准确率的方法:
1. 提供更具体的指令("提取 class='price' 的元素文本"而非"提取价格")
2. 使用 --thinking high 增加推理深度
3. 要求 AI 先截图确认,再提取数据
4. 对关键数据设置二次验证

#42 数据编码乱码

提取的中文/日文/韩文等显示为乱码
确认页面的编码方式。Playwright 默认使用 UTF-8。如果页面使用 GBK/GB2312 等编码,可能需要转码处理。在指令中提示 AI 注意编码问题。

#43 数据量过大导致 Token 消耗巨大

单次爬取消耗了大量 AI Token,费用过高
爬取大页面会将大量 HTML 传给 AI 模型。优化方法:
1. 指定只提取页面的特定区域
2. 使用网络拦截直接获取 API 数据(绕过 DOM 解析)
3. 先用选择器缩小范围,再让 AI 处理
4. 考虑使用更便宜的模型处理简单提取任务

#44 分页数据合并问题

多页数据合并后有重复或缺失
分页爬取时注意:
1. 每页数据提取后立即保存,不要等全部完成
2. 用唯一标识(ID、URL)去重
3. 检查分页是否有"最后一页"标识,避免无限循环
4. 在指令中要求 AI 在每页数据前标注页码

#45 动态价格/库存信息不一致

相同页面多次爬取结果不同
电商网站的价格和库存可能因用户位置、时间、登录状态等因素动态变化。
1. 统一浏览器的 locale、timezone、geo 设置
2. 清除 Cookie 后爬取以获取默认价格
3. 记录爬取时间戳用于后续分析

#46 提取的数据格式不统一

AI 每次输出的 JSON 结构不一样
在指令中严格定义输出格式:
openclaw agent --message "
提取数据并严格按照以下 JSON 格式输出:
{
  'items': [
    { 'title': '...', 'price': 0.00, 'url': '...' }
  ],
  'total': 0,
  'page': 1
}
" --thinking high

#47 图片/文件下载失败

无法下载页面中的图片或 PDF 文件
Playwright 可以拦截下载:
1. 监听 download 事件获取文件
2. 对于图片,直接获取 src 属性后用 curl/wget 下载
3. 在指令中说明:"获取所有图片的 URL 列表",然后单独下载

#48 表格数据提取混乱

复杂表格(合并单元格、嵌套表格)提取后结构错乱
复杂表格是 AI 提取的难点。解决方法:
1. 要求 AI 先截图分析表格结构
2. 指定按行/列顺序提取
3. 对于特别复杂的表格,考虑直接拦截 API 获取原始数据

#49 日期/货币格式解析错误

AI 将 "03/11/2026" 误解析为 11 月 3 日而非 3 月 11 日
不同地区的日期和货币格式不同。在指令中明确格式要求:
- "日期统一使用 YYYY-MM-DD 格式"
- "价格统一使用人民币,格式为 ¥0.00"
- 指明目标网站的 locale 帮助 AI 正确解析

#50 爬取结果推送到渠道失败

数据提取成功但推送到飞书/Telegram 失败
爬取和推送是两个独立环节。排查步骤:
1. 确认渠道配置正确:openclaw doctor
2. 检查消息长度是否超出渠道限制(飞书单条消息 ≤ 4000 字)
3. 大量数据建议先存为文件,再发送文件而非纯文本
4. 检查 Gateway 日志:openclaw logs --tail 50