反爬虫应对与稳定性处理
浏览器自动化在实际运行中会遇到各种不稳定因素:反爬虫检测、页面结构变化、网络超时、验证码等。本节提供实用的稳定性策略。
反爬虫检测的常见类型
graph TD
A[反爬虫检测] --> B[行为检测]
A --> C[特征检测]
A --> D[挑战机制]
B --> B1["请求频率过高
无鼠标移动/点击停顿
操作路径太规则"] C --> C1["headless 浏览器标识
缺少正常浏览器的属性
User-Agent 异常"] D --> D1["CAPTCHA 验证码
Cloudflare Bot Challenge
IP 封禁"]
无鼠标移动/点击停顿
操作路径太规则"] C --> C1["headless 浏览器标识
缺少正常浏览器的属性
User-Agent 异常"] D --> D1["CAPTCHA 验证码
Cloudflare Bot Challenge
IP 封禁"]
应对策略一:人性化操作节奏
最有效的反检测方法是让操作行为更像人类:
提示(加入到每次浏览器操作的开头):
在执行以下操作时,请:
- 每次页面导航后等待 2-3 秒再操作
- 填写表单时模拟正常打字速度(不要一次性填入)
- 点击前先移动到元素附近
- 避免完全规律的时间间隔
对应的 MCP 工具调用顺序:
browser_navigate(url="...")
→ 暂停(Claude 可以说"等待页面稳定")
→ browser_snapshot()(观察页面状态)
→ browser_mouse_move(x=..., y=...)(移动到元素附近)
→ browser_click(...)
→ 暂停1-2秒
→ 下一步操作
应对策略二:Headless 特征规避
{
"mcpServers": {
"playwright-stealth": {
"command": "npx",
"args": [
"@playwright/mcp",
"--browser", "chromium",
"--headless",
"--user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
]
}
}
}
注意:规避反爬虫应在符合目标网站服务条款的前提下进行。很多网站明确禁止自动化访问。
应对策略三:频率控制
对于需要处理大量 URL 的任务,加入速率限制:
提示:
处理以下100个URL时:
- 每处理5个URL后暂停10秒
- 如果遇到429(Too Many Requests)响应,暂停60秒再继续
- 每次只处理一个URL,不并发
- 记录哪些URL处理成功,哪些失败
CAPTCHA 处理策略
遇到 CAPTCHA 时,自动化工具基本无法绕过(也不应该尝试)。实用策略:
| 情况 | 处理方式 |
|---|---|
| 偶发 CAPTCHA | 截图发给用户手动解决 |
| 持续 CAPTCHA | 说明无法自动化,需要手动操作 |
| Cloudflare 挑战 | 使用有头模式 + 保存 Cookie |
| 登录 CAPTCHA | 预先手动登录,保存会话 |
当遇到 CAPTCHA 时,理想的 AI 行为:
[截图显示验证码页面]
遇到了人工验证(CAPTCHA)。自动化工具无法直接处理验证码。
请选择处理方式:
A. 我来手动完成验证码,完成后通知我继续
B. 跳过这个 URL,继续处理其他的
C. 停止当前任务
等待你的选择...
错误恢复与断点续传
对于长时间运行的抓取任务,建立进度保存机制:
提示:
抓取 URL 列表时:
1. 开始前检查 progress.json 是否存在
2. 如果存在,从上次中断的位置继续
3. 每处理10个URL,将进度写入 progress.json
4. 格式:{"completed": ["url1", "url2"], "failed": ["url3"], "next_index": 10}
5. 完成后删除 progress.json
对应的进度文件格式:
{
"started_at": "2026-03-22T09:00:00",
"total": 100,
"completed": ["https://...", "https://..."],
"failed": [{"url": "https://...", "reason": "timeout"}],
"next_index": 15,
"last_updated": "2026-03-22T09:05:30"
}
页面结构变化检测
网站改版会导致抓取逻辑失效。建立健壮性检查:
提示:
提取数据前,先验证页面结构是否符合预期:
1. 检查页面标题是否包含"产品"或"Product"关键词
2. 检查是否存在价格元素(包含¥或$符号的文本)
3. 如果验证失败,截图保存并报告,不要继续提取
稳定性最佳实践汇总
graph LR
subgraph "每次任务前"
A[验证目标页面可访问]
B[检查页面结构符合预期]
C[读取上次进度(断点续传)]
end
subgraph "执行过程中"
D[控制请求频率]
E[操作间隔随机化]
F[异常时截图保存]
G[每N条保存进度]
end
subgraph "完成后"
H[输出成功/失败统计]
I[保存原始数据备份]
J[清理临时文件]
end
A --> D --> H
合规提醒
在使用浏览器自动化抓取数据前,请注意:
- 查看 robots.txt:
网站域名/robots.txt说明哪些路径禁止爬取 - 阅读服务条款:很多网站 ToS 明确禁止自动化访问
- 数据使用限制:提取的数据可能受版权保护
- 频率限制:即使技术上可行,过高的频率也会影响目标网站
本节执行清单
- [ ] 操作节奏加入随机等待(2-3 秒),不使用固定时间间隔
- [ ] 长任务实现断点续传(每 N 条保存进度到文件)
- [ ] 遇到 CAPTCHA 时,告知用户并等待手动处理,不尝试绕过
- [ ] 抓取前检查目标网站的 robots.txt 和服务条款