反爬虫应对与稳定性处理
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read626 words

反爬虫应对与稳定性处理

浏览器自动化在实际运行中会遇到各种不稳定因素:反爬虫检测、页面结构变化、网络超时、验证码等。本节提供实用的稳定性策略。

反爬虫检测的常见类型

graph TD A[反爬虫检测] --> B[行为检测] A --> C[特征检测] A --> D[挑战机制] B --> B1["请求频率过高
无鼠标移动/点击停顿
操作路径太规则"] 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

合规提醒

在使用浏览器自动化抓取数据前,请注意:

本节执行清单


下一章:第 06 章 — 数据库与第三方 API 集成