现代网页的无限滚动机制常通过检测事件对象的 `isTrusted` 属性来区分真实用户操作与 JavaScript 模拟脚本,以此阻止自动化爬虫获取内容。然而,开源项目 Scrapewright 提出了一种创新方案,成功绕过了这一浏览器安全限制。传统的 JS 脚本生成的事件被永久标记为不可信,但该项目利用 Chrome DevTools Protocol (CDP) 的 Input 域,直接向浏览器的底层输入管线注入鼠标滚轮事件。由于这些事件通过了与操作系统输入相同的路径,它们被标记为 `isTrusted: true`,能够完美触发基于 IntersectionObserver 的懒加载机制。技术上,该方法仅能在活动标签页上生效,且受限于 Chrome 的合成帧生成规则。为了保持技术伦理,该工具明确显示调试提示,并将 CDP 权限限制在仅输入指令的范围内,避免了潜在的滥用。该项目的开源代码与白皮书详细记录了这一五层反节流堆栈的实现细节,被认为是今年最为深入的 Chrome 内部机制工程实践之一。
事件分析
这一技术方案揭示了浏览器安全机制中的结构性矛盾:为了支持自动化测试与调试,浏览器必须通过 CDP 暴露底层输入能力,而这恰恰成为了绕过前端防御的合法通道。这标志着反爬虫技术的前沿已从 JavaScript 沙箱层转移到了浏览器协议层,单纯依赖前端事件属性(如 `isTrusted`)的防御策略已宣告失效。从工程伦理角度看,该项目的”按需升级”策略(仅在常规滚动失效时启用 CDP)及其对权限的严格自我限制,为自动化工具开发者提供了一个如何在技术突破与行为合规之间取得平衡的优秀范本。随着更多自动化工具采用内核级注入手段,Web 安全领域将面临更隐蔽的挑战。
核心观点:利用 CDP 协议直接注入原生输入,打破了 JS 沙箱的安全假象,标志着自动化与前端防御的博弈已进入内核层。
原文链接:V2EX 分享发现