展示HN:我们击败了Cloudflare的机器人检测(开源隐形浏览器)
我的代理自信地错了 从2025年7月1日起,Cloudflare默认在每个新域上阻止AI爬虫,并且此后拒绝了数千亿的机器人请求。大部分报道涉及的是AI实验室与出版商之间关于训练数据的大斗争。这不是我的问题。我的问题是一个一直自信但错误的代理。它会读取一个来源,检查价格,抓取我请求的页面,并给我一个听起来正确但实际上不对的答案。它是在读取阻止页面,而不是实际页面:Cloudflare的“稍候片刻”屏幕,以它对所有其他内容使用的同样自信的声音进行总结。响应中没有任何内容表明获取失败。因此,我测量了发生这种情况的频率,并构建了一个解决方案。带有主体的403比什么都没有的403更糟糕 这很容易被忽视的原因是,系统中没有任何东西认为出现了问题。当你对一个受机器人保护的网站进行简单的fetch()、httpx.get()或requests.get()时,通常不会收到异常。相反,你会得到一个403,有时甚至是200,附带完整的HTML主体:Cloudflare的“稍候片刻”屏幕,DataDome的“请启用JavaScript”,PerimeterX的“按住”,亚马逊的“继续购物”墙。对于你的重试逻辑来说,这看起来像是成功;请求完成了。对于语言模型来说,主体只是要阅读的文本,所以它会读取它。将那个27KB的阻止页面交给模型并要求列出上面的职位,它会列出这些职位,其中一个也不存在。错误答案与正确答案完全无法区分。一个响亮的失败、超时或一个干净的429与空的主体会触发重试或跳过,你会继续前进。安静的阻止页面之所以能够滑过,是因为它看起来像内容。你的代理现在无法读取的十二个网站 7月10日,我向一组热门目标发送了一条普通的浏览器请求,以查看Cloudflare拒绝了哪些网站。回来的十二个我们人们最常询问的都有一个硬性的403:使用示例 返回Cloudflare 403的网站 招聘 Indeed,Glassdoor,ZipRecruiter 销售和市场研究 Crunchbase,Product Hunt,Capterra 自由职业 Upwork,Fiverr 商业和消费 StockX,DoorDash,Coinbase,Udemy 如果你在进行招聘、销售研究、潜在客户生成或购物,你已经遇到了这个问题。你可能不会注意到。代理返回一个看似正常的答案,它是在一个从未实际读取过的页面上构建的。基准 有八个网站,每个主要的反机器人供应商一个,每个方式三种。Naive是使用普通桌面Chrome用户代理的curl,大致等于未调优的fetch。Fortress是我们构建的开源隐形浏览器。Tilion Cloud是在其上方的托管层。网站 反机器人 Naive Fortress Tilion Cloud Indeed Cloudflare 403 工作 Zillow PerimeterX 403 878 列表 Walmart Akamai 307 页面 StockX Cloudflare 挑战 GraphQL API Booking 专有 202 应用已加载 Amazon CloudFront WAF 404 点击墙 Etsy DataDome 403 DataDome G2 DataDome 403 DataDome Naive fetch在八个请求中没有获得真实内容。它在八个请求中获得了八次可摘要的主体。而它获得的信号,没有一次可以让代理知道它被阻止。这个最后的数字让我写下了这些。响应中没有任何内容说“你失败了。”开源的Fortress构建今天能通过八个中的五个目标:Cloudflare、CloudFront和PerimeterX。它返回了来自Indeed、Zillow和StockX的干净结构化数据。DataDome(Etsy、G2)和亚马逊的点击墙是它不能通过的三个目标,而这正是Tilion Cloud的构建目标。 相同的URL并排 对两者进行访问indeed.com/jobs?q=software+engineer。Naive fetch返回27KB的“稍候片刻。请启用JavaScript和cookies以继续。”Fortress返回实际的列表:高级软件开发人员,TherapyNotes,远程,$110k到$135k;首席后端工程师(AI),Cotiviti,$217k到$258k,所有完整描述和信息。对两者进行访问zillow.com/homes/for_sale/San-Francisco。Naive fetch返回403,“拒绝访问该页面。”Fortress返回878个实时列表,包括价格、床位和浴室、平方英尺、地址以及上市代理。Naive路径上的代理在两者上没有引发任何错误。它安静地总结了阻止页面并继续前进。 通过的方式是一种梯子 这不是一种技巧。你需要哪种操作取决于你的对手是什么系统。一种单一的隐身抓取,耐心地等待JS挑战,对于Cloudflare、CloudFront和PerimeterX已经足够。这涵盖了Indeed、Zillow和Walmart。将整个页面渲染为结构化markdown可以提取SPA和JS门控内容。当良好的数据存在于后台时,一次侦察可以驱动页面并监控其私有API流量。在StockX上,这解决了Cloudflare的挑战,并捕获了POST /api/graphql返回200,这是该网站自己的定价后端。这比抓取HTML要好,因为你得到了真实的JSON。DataDome和点击墙。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡