在PCI Oasis Inc,我接到了一个听起来很简单的任务:帮公司搭建一个爬虫,能从电商网站首页一路自动点到结账页面。
打开浏览器,点几个按钮,到达结账页。搞定。
![]()
问题是,互联网不想让你这么干。
每个主流电商平台——你熟悉的那些时尚品牌、电子产品商城、球鞋网站——都部署了某种形式的机器人检测。Cloudflare、DataDome、PerimeterX、Akamai、Kasada。这些系统相当精密,它们不只是检查HTTP头对不对,而是观察你在浏览器里的行为模式。
它们测量什么?你的鼠标是不是走直线?打字速度是不是恒定不变?浏览器的Canvas指纹是不是已经被标记过一千次?WebGL渲染器是否暴露了云端虚拟机的痕迹?
只要有任何异常——我是说任何——你就会碰到验证码、被静默重定向,或者直接拿到空白页面。
我们的爬虫必须突破这一切。全自动。任意网站。无需人工介入。
指纹与伪装
我没料到的是:浏览器有指纹,而无头浏览器的指纹格外显眼。
当Chrome在云端服务器上以无头模式运行时,好几处特征会暴露身份。解决办法?在页面加载前就把每一处都打上补丁。
但这只是开始。真正有意思的是Canvas指纹。
浏览器的美术课如何出卖你
有个很疯狂的事实:网站可以通过让浏览器画点东西,来判断大量信息。
HTML5 Canvas API允许JavaScript渲染图形,但渲染结果的像素级输出会因真实硬件、操作系统和GPU驱动的不同而略有差异。云端虚拟机上的无头Chrome总是运行在相同的虚拟GPU上,产出的哈希值一致且可被识别。
机器人检测系统维护着这些哈希的数据库。如果你的匹配上已知的无头浏览器指纹——封禁。
解决方案?给Canvas输出添加噪声。微小、不可察觉的随机变动,让每个会话产生独特的哈希。
WebGL同理——这是GPU指纹。GCP上的无头Chrome返回"Google SwiftShader"作为渲染器。这是明显的破绽。
鼠标难题
这是我最喜欢的一部分。
人类的鼠标不会走直线。你现在就可以观察自己的光标——它会弯曲、加速、减速、稍微 overshoot 再修正。这是一条优美、凌乱、有机的轨迹。
机器人走直线,或者瞬移。两者都是即时警报。
解决方案:贝塞尔曲线鼠标模拟。
贝塞尔曲线是由控制点定义的数学曲线。通过在光标当前位置和目标之间生成随机控制点,就能得到一条自然的曲线路径,带有真实的加速和减速。
打字也一样。真人不会以精确的120毫秒间隔敲击键盘。他们有节奏,有偶尔的停顿。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.