对于国内的互联网公司来说,经常需要处理涉及国外网站的工作。尽管经历了与国内大量卷王公司的竞争,处理国外业务似乎应该是一种降维打击。然而,实际情况是,尽管在本地测试阶段一切顺利,一旦上线,却面临全面飘红的问题,多个不同业务同时遭遇 Cloudflare 著名的五秒盾。
根据Cloudflare反爬虫的说明,只要使用了其域名解析服务,就默认享受一系列防护服务(尤其是 JavaScript 防护)。具体而言,会在
/cdn-cgi/challenge-platform/
路径下嵌入风控逻辑。他们收集浏览器的指纹信息,并根据后台大数据对比计算当前环境的可疑概率,以进行风控。
原则上,这个风控机制并不是不可解决的问题。毕竟,五秒盾只会对第一次登录进行验证。即使 hCaptcha 难以自动处理,可以先手动处理一次,然后复用相同的 Cookie,并且在控制规模和频率的前提下,基本上能够满足业务需求。然而,令人困惑的是,无论验证多少次,页面永远不会跳转回正常状态。
通常情况下,面对强力风控,对于大多数网页爬虫而言,如果不是极其重要的业务,大部分公司通常会考虑从业务上寻找替代策略,尽量避免正面冲突。但是,在使用本地浏览器的匿名模式下访问,并且在线上使用相同代理IP的情况下,虽然仍然会遇到五秒盾,但人工操作却能正常通过。这说明其风控策略本身可能并不强大,或者说这看起来更像是一种 Bug 或某种安全策略,而不像是无法解决的问题。然而,在简单尝试之后,发现了一些意想不到的困难。
为了解决这个问题,大多数公司的工作环境是基于自定义的cef有头浏览器。它通过cef框架钩取浏览器页面的LoadStart、LoadEnd、LoadError等事件,注入纯JavaScript脚本用于页面操作,并通过代理抓包获取数据。同时,定制一些集群管理、任务管控和链路追踪等逻辑。
既然在本地环境下能够成功通过风控,而线上环境却不能,我们可以尝试在本地搭建类似线上环境的测试环境。通过逐步控制变量,将两者的环境参数逐渐接近,直到找到出现问题的临界点。
在测试过程中,有两点需要特别注意:
- 如果配置了用户目录或缓存目录,务必在每次测试之前清除,以防影响结论。
- 每次测试都要进行多次重复,否则很容易由于各种偶然原因影响结论的准确性。
在这里省略了探索过程的冗长描述,直接记录多次尝试后得出的结论:
- 关闭–single-process配置:线上环境默认选择了单进程模式,这本意是为了节省进程数量,从而节省内存,并使单个机器能够同时运行更多任务。Cloudflare也许通过某种方式发现了单进程模式下的安全性问题,或者触发了单进程模式下的某些Bug,导致风控页面无法跳转。
- 尽可能使用较新版本的Chromium内核:UserAgent的值应尽量与实际内核版本保持一致。长时间不升级的浏览器显然存在问题,而且内核较老的浏览器容易存在未修复的安全漏洞,可能无法通过检测。
- 努力提高页面加载速度:大数据显示,加载速度越慢的网络环境越可能存在危险。各种钩取处理、多层代理、抓包解包等操作都会影响网络响应速度,因此必须寻找方法提高速度。
当然,还是有更简单的办法来达成绕过CloudFlare验证的效果,比如使用穿云API。
使用穿云API,您可以轻松地绕过Cloudflare的机器人验证,即使您需要发送10万个请求,也不必担心被识别为抓取者。
一个穿云API即可突破所有反Anti-bot机器人检查,轻松绕过Cloudflare、CAPTCHA验证,WAF,CC防护,并提供了HTTP API和Proxy,包括接口地址、请求参数、返回处理;以及设置Referer,浏览器UA和headless状态等各浏览器指纹设备特征。