做爬虫的人大多踩过这个坑:刚把 UA 改顺,页面还是照样拦你。现在电商、招聘、资讯这类站点的反爬,基本不是靠单一手段在挡,而是三层一起上——人机验证负责卡入口,设备指纹负责认人,频率限制负责压请求节奏。
只盯着其中一层,通常都不太够。验证码能过,不代表后面不会被设备指纹认出来;IP 轮换得再勤,指纹没处理好,还是会进黑名单;请求头伪装得像模像样,频率一高,限流照样会来。更稳的做法,是把这三块放在一起看,而不是拆开单独'破解'。
一、先看反爬到底在盯什么
写绕过方案之前,先把对方的检测点看清楚。不然代码写得再多,也只是碰运气。
1.1 人机验证:先判断你是不是'像人'
现在的人机验证早就不只是输个验证码这么简单了。它更在意你操作是不是像真人:
- 操作轨迹:滑块有没有停顿、回拉、加速度变化,直线拖过去通常很扎眼;
- 行为顺序:是不是先 hover,再点击,再拖动,动作太'干净'反而像脚本;
- 浏览器环境:页面能不能正常渲染,有没有无头浏览器常见的异常特征。
常见的还是滑块、点选、行为验证和图文识别这几类。形式不一样,底层想看的东西差不多。
1.2 设备指纹:给你的浏览器打标签
站点通常不会只看一个字段。它会把很多细碎特征拼起来,凑成一份'设备画像'。
- 浏览器版本、系统版本、时区、语言
- 屏幕分辨率、字体、插件、WebGL 信息
- Canvas、Audio、WebRTC 这类可用来做指纹的环境差异
- 请求头、Cookie、TLS 特征以及访问行为的稳定性
这里真正麻烦的地方,不是某一个字段暴露了,而是这些特征组合起来太稳定。你改掉一两个值,反而容易显得更奇怪。
1.3 频率限制:控制你能多快访问
限流是最直白的一层。它不一定关心你是谁,只关心你是不是太急了。
常见做法包括:
- 按 IP、账号、Cookie、设备指纹做计数
- 对短时间内的连续请求做降速或封禁
- 对高价值接口单独加严格阈值
很多时候,真正触发封禁的不是单次请求,而是你前面几分钟的节奏已经把自己暴露了。
二、实战里怎么拆
如果只讲'绕过',很容易变成一堆零散技巧。我更倾向于把它拆成三件事:先把浏览器环境做得像样,再把行为节奏压下来,最后再去碰验证环节。顺序乱了,很多时候是白忙。
2.1 人机验证:别一上来就硬刚
验证码这块,最稳的思路通常不是'见一个解一个',而是先判断它是不是必须处理的关口。能走正常会话就别碰验证,能复用已通过的状态就别重复挑战。对需要交互的页面,重点不是让脚本跑得更快,而是让它别表现得像脚本。
2.2 设备指纹:一致性比伪装更重要
设备指纹最怕'半真半假'。UA 改了,但时区没改;分辨率变了,但字体列表还是原样;浏览器表现像桌面端,网络特征却像批量代理。站点抓的就是这种不一致。
所以实操里,重点不是堆更多伪装项,而是尽量保证环境特征前后一致。一次会话里稳定,比每个字段都'看起来高级'更有用。
2.3 频率限制:把节奏放慢,比换代理更直接
限流处理很多人第一反应是换 IP,但这通常不是最优先的动作。请求节奏本身就能暴露很多信息。比如连续接口打得过密、失败重试太快、翻页行为像脚本一样匀速,这些都很容易被记住。
更实际的办法是控制并发、加随机间隔、把重试策略做得保守一点。对一些站点来说,这比频繁切代理更有效,也更不容易把自己搞乱。
三、真正难的是闭环,不是单点技巧
反爬绕过最容易走偏的地方,就是总想着'把某一关破解掉'。但现实里,验证、指纹、限流经常是联动的:你刚通过验证码,后面的指纹不对;你把指纹伪装好了,频率又太高;你把节奏放慢了,状态维护又断了。
所以更靠谱的做法,是把它当成一套链路来处理:
- 会话状态尽量连贯
- 环境特征尽量稳定
- 请求节奏尽量自然
这三件事缺一块,整体效果都会明显掉下来。


